2013-07-04 2 views
1

У меня есть запрос, как это:Динамически изменить NamedQuery

SELECT * 
FROM MyTable mt 
WHERE mt.firstCondition = :var1 
AND mt.secondCondition = :var2 

var1 является Integer и var2 является строка. Я хочу отменить условие для var1, если я получу -1 на нем. Итак, если var1 - это что-то меньшее нуля, запрос становится следующим:

SELECT * 
FROM MyTable mt 
WHERE mt.secondCondition = :var2 

Могу ли я сделать это изменение в NamedQuery?

ответ

2

Hibernate разбирает назвал запросы при запуске, который является тем, что дает прирост производительности Hibernate не должна делать это каждый раз, когда запрос выполняется. Так что я говорю, вы не можете динамически изменять именованный запрос, он победит его цель, если вы сможете. Что вы можете сделать, так это указать некоторые условия в вашем именованном запросе, чтобы удовлетворить ваши потребности. Luis LL предоставил вам условие, поэтому я не буду повторять.

2

нравится это?

SELECT * 
FROM MyTable mt 
WHERE (mt.firstCondition = :var1 OR :var1 = -1) AND mt.secondCondition = :var2 
+0

-1 недействительное значение. Когда я получаю -1, это означает, что я должен возвращать результаты для каждого значения в этом поле. Вот почему мне нужно избавиться от этого состояния. –

+0

- та же причина, по которой я заставляю ее true в правой части OR (mt.fisrtCondition =: var1 ** OR: var1 = -1 **) –