2013-09-17 1 views
1

мне нужно что-то похожее на этот SQL запрос:Запрос JPQL/JPA для упорядочения объектов на основе наибольшего/максимального из двух столбцов?

SELECT * FROM foo f ORDER BY GREATEST(f.bar_date, f.baz_date) 

Поскольку не все системы РСУБД поддерживает функцию GREATEST, в идеале я хотел бы реализацию JPA, чтобы сгенерировать корректный запрос SQL для базы данных. Базами, на которые я нацелен, являются Oracle, SQL Server и PostgreSQL.

ответ

2

JPQL позволяет оператору FUNCTION вызывать функцию базы данных.

Поддержка Oracle и Postgres БОЛЬШЕ, я не думаю, что SQL Server делает это, поэтому вы можете написать свою собственную функцию.

Вы также можете использовать функцию CASE с>.

0

Чтобы сделать это немного конкретнее - вы можете сделать это в JPQL с помощью инструкции CASE, которая поддерживается с JPA 2.0. Я пропустил суффиксы _date для краткости.

SELECT * FROM foo f ORDER BY CASE WHEN f.bar > f.baz THEN f.bar ELSE f.baz END 
0

Я использовал функцию CASE.

критерии

Via строитель это выглядит следующим образом:

CriteriaQuery<?> query = ... 
CriteriaBuilder builder = entityManager.getCriteriaBuilder(); 

query.orderBy(builder.selectCase().when(builder.greaterThan(pathToBarDate, pathToBazDate),pathToBarDate).otherwise(pathToBazDate)); 

В JPQL он должен выглядеть

ORDER BY 
    CASE WHEN (f.bar_date>f.baz_date) THEN f.bar_date 
      ELSE f.baz_date 
Смежные вопросы