动态更改 NamedQuery
Posted
技术标签:
【中文标题】动态更改 NamedQuery【英文标题】:Dynamically change a NamedQuery 【发布时间】:2013-07-04 20:00:15 【问题描述】:我有一个这样的查询:
SELECT *
FROM MyTable mt
WHERE mt.firstCondition = :var1
AND mt.secondCondition = :var2
var1 是一个整数,而 var2 是一个字符串。如果我收到 -1,我想放弃 var1 的条件。因此,如果 var1 低于零,则查询变为:
SELECT *
FROM MyTable mt
WHERE mt.secondCondition = :var2
我可以对 NamedQuery 进行更改吗?
【问题讨论】:
【参考方案1】:Hibernate 在启动时解析命名查询,这是提高性能的原因,因为 Hibernate 不必在每次执行查询时都这样做。所以我要说的是你不能动态地改变一个命名的查询,如果可以的话,它会破坏它的目的。您可以做的是在您的命名查询中放置一些条件以满足您的需求。 Luis LL 提供了条件,我不再赘述。
【讨论】:
【参考方案2】:喜欢这样吗?
SELECT *
FROM MyTable mt
WHERE (mt.firstCondition = :var1 OR :var1 = -1) AND mt.secondCondition = :var2
【讨论】:
-1 不是有效值。当我收到 -1 时,这意味着我必须为该字段上的每个值返回结果。这就是为什么我需要摆脱这种情况。 这与我在 OR 右侧强制它为 true 的原因相同 (mt.fisrtCondition = :var1 OR :var1 = -1)以上是关于动态更改 NamedQuery的主要内容,如果未能解决你的问题,请参考以下文章
iOS 更改页面时如何动态更改 PageControl 颜色?