动态更改 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 颜色?

在选项卡更改时动态更改 iframe 的高度?

根据单元格的不更改单元格高度动态更改 UICollectionView 高度

在pyqt中ComboBox项目更改后动态更改UI

Android怎么动态更改actionbar的背景颜色

动态更改 colors.xml 的值以更改 android 应用程序的外观