Проблема с разбиением на страницы и сортировкой в ​​классе со ссылкой «многие к одному» - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть конечная точка API, которая принимает форму многоугольника на карте и возвращает список предприятий в этой форме.Вот как выглядит метод, который выполняет поиск:

@Query(value="SELECT i FROM IntakeProperty i WHERE ST_WITHIN(i.address.point, (:searchArea)) = true")
Page<IntakeProperty> findAllByPolygon(@Param("searchArea") Polygon searchArea, Pageable pageable);

Данные возвращаются на внешний интерфейс просто отлично, однако проблема заключается в сортировке данных.

Естьчисло свойств в этом объекте IntakeProperty, и одно из них представляет собой список IntakeLeaseTransactions.Эти лизинговые сделки содержат большую часть информации, которая поступает на передний план, касающейся собственности.IntakeProperty имеет отношение «Один ко многим» с IntakeLeaseTransaction.

Отложив на некоторое время многоугольник, если я выполняю обычный поиск всех свойств с помощью обычного вызова findAll (Pageable), я могу отсортировать повсе показанные свойства: те, которые получены непосредственно от IntakeProperty и связанной с ним транзакции IntakeLeaseTransaction.Однако, когда я использую свой пользовательский запрос, я могу сортировать данные только по столбцам, которые находятся непосредственно в IntakeProperty.Когда я хочу отсортировать по столбцу связанной сущности IntakeLeaseTransaction, я получаю ошибку:

org.hibernate.QueryException: illegal attempt to dereference collection [intakeprop0_.id.intakeLeaseTransactions] with element property reference [tenantNetRentableArea] [SELECT i FROM com.ldt.domain.IntakeProperty i WHERE ST_WITHIN(i.address.point, (:searchArea)) = true order by i.intakeLeaseTransactions.tenantNetRentableArea asc];

Это шаблон, просто замените tenantNetRentableArea на любое свойство из IntakeLeaseTransaction, по которому я пытаюсь отсортировать, иэто ошибка, которую я получу.

Если я понимаю ошибку, проблема в том, что IntakeLeaseTransaction в IntakeProperty является списком, и он не может знать, какой элемент из этого списка захватить полечто нужно отсортировать, даже если в списке только 1 элемент.

Как я могу решить эту проблему, сохранив IntakeLeaseTransaction в качестве типа List в классе IntakeProperty?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...