Как строить JPQL-запросы, когда параметры являются динамическими? - PullRequest
2 голосов
/ 08 сентября 2011

Интересно, есть ли хорошее решение для создания запроса JPQL (мой запрос слишком «выразителен» и я не могу использовать критерии) на основе фильтра.

Что-то вроде:

query = "Select from Ent"
if(parameter!=null){
   query += "WHERE field=:parameter"
}
if(parameter2!=null) {
   query += "WHERE field2=:parameter2"
}

Но я бы написал ГДЕ дважды !! и казуистический взрывается с увеличением числа параметров. Потому что ни один, ни все не могут быть нулевыми.

Любой намек на правильное построение этих запросов на основе фильтров?

Ответы [ 2 ]

4 голосов
/ 08 сентября 2011

Почему вы не можете использовать критерий, , как это .

Другие варианты (менее хорошие imho):

Создайте два именованных запроса по одному для каждого условия, затем вызовите соответствующий запрос.

Или создайте строку и используйте собственный запрос .

О, вы просто имеете в виду образование струн (?):

query = "Select from Ent where 1=1 "
if(parameter!=null){
   query += " and field=:parameter"
}
if(parameter2!=null) {
   query += " and field2=:parameter2"
}

(я думаю, что формирование строки ужасно, но, похоже, это то, о чем просили)

2 голосов
/ 14 апреля 2017
select * from Ent    
    where (field1 = :parameter1 or :parameter1 is null)       
    and (field2 = :parameter2 or :parameter2 is null)
...