Как упорядочить результаты по выражению клиента в Hibernate / HQL / JPQL - PullRequest
1 голос
/ 17 августа 2011

У меня есть постоянная сущность Кошки (идентификатор, имя).Я хочу запросить всех кошек (используя HQL / JPQL), чтобы коты с именем 'Tom' были на вершине, т.е. упорядочены по пользовательскому выражению name = 'Tom'.

В Oracle я могу сделать это, используя

ORDER BY CASE name WHEN 'Tom' THEN 0 ELSE 1 END.

Как это сделать в Hibernate?

Ответы [ 2 ]

6 голосов
/ 17 августа 2011

Я только что написал тестовый класс и следующие работы в Hibernate / JPA 3.6.1:

SELECT o 
  FROM Cat o 
 ORDER BY CASE o.name WHEN 'Tom' THEN 0 ELSE 1 END
0 голосов
/ 17 августа 2011

Один и тот же запрос невозможен в простом JPQL / HQL, но есть два способа получить один и тот же результат

1) Напишите собственный запрос и сопоставьте его с сущностью Cat.

2) Создайте представление и создайте подкласс сущности Cat для сопоставления с представлением.

Я прекрасно понимаю, что ни одно из решений не является идеальным, но ни Hibernate, ни JPA не имеют функции для этого сценария, кроме собственного запроса. Я думаю, что вы должны подумать, что является лучшим из этих трех решений, так как это повлияет на ваши интеграционные тесты.

...