Spring Data JPQL Как создать запрос с динамическим предложением where? - PullRequest
0 голосов
/ 20 декабря 2018

Я создаю пользовательские JPQL-запросы для получения некоторых данных.У меня есть определенные случаи, когда я хотел бы добавить предложение where в зависимости от того, является ли значение параметра ненулевым.

Например, эквивалентный SQL-запрос:

//If parameter status is not null.
SELECT sum(A.sal) FROM TABLE A WHERE A.STATUS = 'X' GROUP BY A.CURRENCY;

//else
SELECT sum(A.sal) FROM TABLE A GROUP BY A.CURRENCY;

Может кто-нибудь помочь мне с этим.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Да ладно, JPQL это просто обычная строка :) Вы хотите что-то вроде этого?

private String generateHql(String status) {
String jpql = "SELECT sum(A.sal) FROM TABLE A ";
if (null != status) {
 jpql += "WHERE A.STATUS = " +status ;
}
jpql += " GROUP BY A.CURRENCY "
return jpql;
}
0 голосов
/ 21 декабря 2018

Два запроса:

//If parameter status is not null.
SELECT sum(A.sal) FROM TABLE A WHERE A.STATUS = 'X' GROUP BY A.CURRENCY;

//else
SELECT sum(A.sal) FROM TABLE A GROUP BY A.CURRENCY;

могут быть сжаты до одного.

Сначала давайте объявим именованный параметр statusParam.Этот параметр может принимать любое значение (например, 'X' или null сверху).Таким образом, два запроса выше могут быть переписаны на:

SELECT sum(A.sal) FROM A WHERE (A.STATUS = :statusParam OR :statusParam is null ) GROUP BY A.CURRENCY;
...