Как упорядочить результаты по выражению клиента в Hibernate/HQL/JPQL

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

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

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

Как сделать в спящем режиме?


person Vladimir Balandin    schedule 17.08.2011    source источник


Ответы (2)


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

SELECT o 
  FROM Cat o 
 ORDER BY CASE o.name WHEN 'Tom' THEN 0 ELSE 1 END
person beny23    schedule 17.08.2011
comment
Отлично работает с Hibernate 4.0.4 и PostgreSQL. Я даже могу добавить дополнительные столбцы order by. - person Aron Lorincz; 07.07.2015

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

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

2) Создайте представление и создайте подкласс объекта Cat, чтобы сопоставить его с представлением.

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

person Augusto    schedule 17.08.2011