web-dev-qa-db-ja.com

複数および/または条件にHibernateCriteriaオブジェクトを使用する方法

3つの条件を含むHibernate基準制限を作成する必要があります。問題は、最後の条件がAND演算子を使用した条件に実際に一致することです。

私の最初の条件:

Criterion startInRange = Restrictions.between("expectedStartCanonicDate", 
                                               rangeStart, rangeEnd);

私の2番目の条件:

Criterion endInRange = Restrictions.between("expectedCompletionCanonicDate", 
                                             rangeStart, rangeEnd);

私の3番目の条件は、次の2つの条件を一緒にする必要があります。

criteria.add(Restrictions.le("expectedStartCanonicDate", rangeStart));
criteria.add(Restrictions.ge("expectedCompletionCanonicDate", rangeEnd));

私がやりたい制限は、condition1またはcondition2またはcondition3です。私は私を近づける例を見つけました。 LogicalExpressionを使用して、または最初の2つの条件を一緒に使用できますが、特に最後の条件が実際には2つの別々の条件 'or'である場合、3つの条件をanded3つの条件にする方法がわかりません。 。

何かご意見は?フレッド

13
Fred Altman

orにリンクされた一連の制限は、論理和と呼ばれます。 andにリンクされた一連の制限は、接続詞と呼ばれます。

だから、あなたが必要なのは

  • 3番目の条件の1つの接続詞
  • 1番目、2番目、および3番目の条件をリンクする1つの論理和:

だからここに行く:

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);
47
JB Nizet
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));
1
user3572247