如何将Hibernate Criteria对象用于多个和/或条件

Fre*_*man 13 hibernate-criteria

我需要创建一个Hibernate标准限制,或3条件.问题是最后一个条件是使用AND运算符的条件.

我的第一个条件:

Criterion startInRange = Restrictions.between("expectedStartCanonicDate", 
                                               rangeStart, rangeEnd);
Run Code Online (Sandbox Code Playgroud)

我的第二个条件:

Criterion endInRange = Restrictions.between("expectedCompletionCanonicDate", 
                                             rangeStart, rangeEnd);
Run Code Online (Sandbox Code Playgroud)

我的第三个条件需要和以下两个条件一起:

criteria.add(Restrictions.le("expectedStartCanonicDate", rangeStart));
criteria.add(Restrictions.ge("expectedCompletionCanonicDate", rangeEnd));
Run Code Online (Sandbox Code Playgroud)

我想要做的限制是condition1或condition2或condition3.我找到了让我接近的例子.我可以一起使用LogicalExpression或者前两个条件,但是,我不确定如何处理or3个条件,特别是当最后一个条件实际上是两个独立的条件anded时.

有什么想法吗?弗雷德

JB *_*zet 47

与之相关的一系列限制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);
Run Code Online (Sandbox Code Playgroud)