В моем приложении я передаю параметры сортировки из пользовательского интерфейса через параметры HTTP-запроса в приложение Spring Data Rest.Моя сущность репозитория JPA содержит сущности @ManyToOne.Данные, которые я отправляю обратно в пользовательский интерфейс, извлекаются из свойств этих вложенных объектов (сотрудник, контакт, businessLine, показанный ниже).Я создал объект Pageable с параметрами сортировки, поступающими из пользовательского интерфейса.Я не хочу жестко кодировать псевдоним сущности для параметров сортировки вручную в моем приложении.Есть ли у вас какие-либо идеи, как я могу это сделать.
Page<BusContact> contacts = busContactRepository.findAll(pageable);
Сущность ..
@Data
@Entity
@Table(name = "BUSCONTACTS")
public class BusContact implements Persistable<String> , Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id", unique = true)
@GeneratedValue(generator = "id")
@GenericGenerator(name = "id", strategy = "uuid2")
private String id;
@JsonProperty("Business Line")
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH})
@JoinColumn(name = "business_line_id", referencedColumnName = "id")
private BusinessLine businessLine;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
@JoinColumn(name = "contact_id", referencedColumnName = "id")
private Contact contact;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "employee_id", referencedColumnName = "id")
private Employee employee;
...
Параметры сортировки, которые работают
employee.employeeNumber: ASC
employee.company: ASC
Параметры сортировкикоторые не работают
employeeNumber: ASC
company: ASC
Мне нужно вручную определить, какая сущность имеет свойство сортировки, и добавить псевдоним сущности при создании объектов Sort.Order для передачи в Pageable.
new Sort.Order(Sort.Direction.fromString(sortProps[1].trim()), "employee."+sortProps[0].trim())
Аналогично для свойств в объектах 'contact' и 'businessLine', которые я хочу отсортировать.
Одним из решений, которое я пытался, было использование метаданных репозитория и сущности, чтобы определить, какая сущность имеетсвойство, а затем динамически добавить имя объекта в качестве псевдонима.Но попытка получить метаданные была довольно сложной задачей.Я пробовал Репозитории, DefaultRepositoryMetadata.Просто разместите здесь, чтобы увидеть, если у вас есть лучшее решение.Благодаря.