到目前为止,我一直只使用带有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但我之前从未使用过它。所以你对此有什么想法吗?你是怎么做到的,感谢您阅读本文。
答案 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));