【问题标题】:Working with hibernate multiple Criteria with logical AND使用逻辑 AND 使用休眠多个条件
【发布时间】:2010-12-15 12:48:49
【问题描述】:

到目前为止,我一直在处理一个具有 2 个属性的案例,其中 and 作为逻辑运算符,所以我像这样使用 LogicalExpression

Criterion eqRef = Restrictions.eq("referenceID", referenceId);
Criterion eqType = Restrictions.eq("verificationType", type);
LogicalExpression and = Restrictions.and(eqRef, eqType);

这次超过 2 个,所以我有点困惑。说这次我添加了用户名属性,我可以使用它进行正常的链接

session.createCriteria(this.getPersistentClass())
.add(Restrictions.eq("referenceID", referenceId))
.add(Restrictions.eq("verificationType", type))
.add(Restrictions.eq("username", username))
.list();

但现在我不知道它们之间使用了哪种逻辑运算符。我也很想这样做:

Criterion eqRef = Restrictions.eq("referenceID", referenceId);
Criterion eqType = Restrictions.eq("verificationType", type);
Criterion equsername = Restrictions.eq("username", username);
LogicalExpression and = Restrictions.and(eqRef, eqType);
LogicalExpression secondand = Restrictions.and(and, equsername);

我也看到了 eqAll,但我以前从未使用过它。那么您对此有什么想法吗?您是如何做到的,感谢您阅读本文。

【问题讨论】:

    标签: java hibernate orm jakarta-ee


    【解决方案1】:

    由于您对所有限制进行“与”操作,因此分组是无关紧要的,因此您可以像第二个示例一样继续进行,因为对它们进行分组没有任何好处,例如

    .add(Restrictions.eq("referenceID", referenceId)).add(Restrictions.eq("verificationType", type)).add(Restrictions.eq("username", username))...
    

    您确实遇到了这个问题,您需要对混合的“AND”和“OR”查询进行分组,如果您想对多个“OR”值进行分组,您还可以将 Criteria 添加到 Disjunction

    【讨论】:

      【解决方案2】:

      单独添加这些限制会在它们之间创建“与”关系。这足以满足您的需要。

      【讨论】:

        【解决方案3】:

        但现在我不知道是哪种 它们之间使用的逻辑运算符。

        已经有了很好的答案,但顺便说一句,您可以使用属性hibernate.show_sql,将其设置为 true,您将能够准确地看到您的条件生成的 sql。

        【讨论】:

          【解决方案4】:

          就用这个

          criteria = session.createCriteria(Model.class).add(
                                       Restrictions.between("ModelDate", dateMin, dateMax));
          

          【讨论】:

          • 你能解释一下“ModelDate”、“tglMin”和“tglMax”是什么吗?我没有在问题中看到它们,我不知道你为什么要使用它们。
          • ModelDate 是来自模型/实体的日期列,tglMin & tglMax 我的意思是 dateMin & dateMax 在限制之间。
          猜你喜欢
          • 2019-01-15
          • 2015-11-05
          • 1970-01-01
          • 2015-03-15
          • 2018-05-04
          • 1970-01-01
          • 2015-04-20
          • 2019-12-18
          相关资源
          最近更新 更多