我有这样的查询:
SELECT *
FROM MyTable mt
WHERE mt.firstCondition = :var1
AND mt.secondCondition = :var2
var1是一个Integer,var2是一个String。如果我收到-1,我想丢弃var1的条件。因此,如果var1为零,则查询变为:
SELECT *
FROM MyTable mt
WHERE mt.secondCondition = :var2
我可以在NamedQuery上进行更改吗?
答案 0 :(得分:3)
Hibernate在启动时解析命名查询,这提高了性能,因为Hibernate不必在每次执行查询时都这样做。所以我所说的是你无法动态更改命名查询,如果可以,它将失败其目的。您可以做的是在您的命名查询中放置一些条件以满足您的需求。路易斯LL为您提供了条件,所以我不会重复。
答案 1 :(得分:2)
SELECT *
FROM MyTable mt
WHERE (mt.firstCondition = :var1 OR :var1 = -1) AND mt.secondCondition = :var2