【问题标题】:Dynamically change a NamedQuery动态更改 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 进行更改吗?

【问题讨论】:

    标签: java sql hibernate jpa named-query


    【解决方案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)
      猜你喜欢
      • 2023-03-09
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多