使用逻辑AND处理hibernate多个Criteria

时间:2009-11-11 16:16:55

标签: java hibernate orm java-ee

到目前为止,我一直只使用带有2个属性的案例和作为逻辑运算符,所以我使用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但我之前从未使用过它。所以你对此有什么想法吗?你是怎么做到的,感谢您阅读本文。

4 个答案:

答案 0 :(得分:10)

由于你是“和” - 你的所有限制,分组是无关紧要的,所以你可以像你的第二个例子一样继续,因为通过对它们进行分组没有任何好处,例如

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

  

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

已经有了很好的答案,但是除了你可以使用属性hibernate.show_sql,将其设置为true,你就能够确切地看到你的标准产生了什么样的SQL。

答案 3 :(得分:-1)

只需使用此

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