Spring Data JPA - возможна ли сортировка по полю в атрибуте? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть две таблицы в БД, моделирующие отношение один к одному.

Класс сущности содержит нечто похожее на следующее:

@Entity
@Table(name = "my_table")
public class MyEntity {
    @OneToOne(fetch = FetchType.LAZY)
        private MyOtherEntity myOtherEntity
}

Тогда у нас есть другой класс, моделирующий таблицу с отношением один к одному:

Entity
@Table(name = "my_other_table")
public class MyOtherEntity {
    private String name;
}

И упрощенный репозиторий:

public class MyRepository extends PagingAndSortingRepository<MyEntity, Long> {
    @Query("SELECT m from MyEntity m INNER JOIN  m.myOtherEntity mo")
    Page<MyEntity> search(Pageable pageable);
}

Этот репозиторий вызывается с помощью контроллера, который получает Pageable в качестве параметра

Как должен выглядеть параметр запроса при сортировке по полю name в MyOtherEntity?

Я пробовал:

sort=myOtherEntity.name

Но я получаю

ORDER BY clause is not in SELECT list

У меня также нет возможности распечатать сгенерированный SQL.

1 Ответ

1 голос
/ 04 апреля 2019

Согласно документации вы можете полностью игнорировать JPQL и сделать что-то вроде этого:

Page<MyEntity> findAllOrderByMyOtherEntityName();

Вы всегда должны отдавать предпочтение запросам данных по сравнению с JPQL , если ваши методы будут достаточно читабельными ... это проще и менее подвержено ошибкам. Плюс: он разъединяет строки и программную логику, что должен делать каждый серьезный разработчик.

И если вы хотите создавать более сложные операторы: взгляните на QueryDSL - он позволяет писать безопасные для типов запросы, в то время как их приятно интегрируют в JPA-данные Spring, они официально поддерживаются (!)

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