我需要创建一个Hibernate标准限制,即3条件。问题是最后一个条件是使用AND运算符的条件。
我的第一个条件:
Criterion startInRange = Restrictions.between("expectedStartCanonicDate",
rangeStart, rangeEnd);
我的第二个条件:
Criterion endInRange = Restrictions.between("expectedCompletionCanonicDate",
rangeStart, rangeEnd);
我的第三个条件需要和以下两个条件一起:
criteria.add(Restrictions.le("expectedStartCanonicDate", rangeStart));
criteria.add(Restrictions.ge("expectedCompletionCanonicDate", rangeEnd));
我想要做的限制是condition1或condition2或condition3。我找到了让我接近的例子。我可以一起使用LogicalExpression或前两个条件,但是,我不确定如何or
3个条件,特别是当最后一个条件实际上是两个单独的条件“anded
”时。 / p>
有什么想法? 佛瑞德
答案 0 :(得分:46)
与or
相关联的一系列限制称为析取。与and
关联的一系列限制称为连词。
所以,你需要的是
所以这就是:
Criterion startInRange = Restrictions.between("expectedStartCanonicDate", rangeStart, rangeEnd);
Criterion endInRange = Restrictions.between("expectedCompletionCanonicDate", rangeStart, rangeEnd);
Criterion thirdCondition =
Restrictions.conjunction().add(Restrictions.le("expectedStartCanonicDate", rangeStart))
.add(Restrictions.ge("expectedCompletionCanonicDate", rangeEnd));
Criterion completeCondition =
Restrictions.disjunction().add(startInRange)
.add(endInRange)
.add(thirdCondition);
criteria.add(completeCondition);
答案 1 :(得分:1)
Criteria criteriaObj = sessionselectreply.createCriteria(TaskReplyVO.class,"taskreply")
.createAlias("taskreply.objTaskView", "taskview")
.createAlias("objMailTo", "mailto")
.add(Restrictions.eq("taskview.longTaskId", taskid))
.add(Restrictions.eq("mailto.longuserid", userid));