Как использовать объекты Hibernate Criteria для нескольких и/или условий
Мне нужно создать ограничение на спящий режим, равное 3 Условиям. Проблема в том, что последнее условие обстоятельно зависит от условий с использованием оператора И.
Мое первое условие:
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));
Ограничением, которое я хочу сделать, является условие 1 или условие2 или условие3. Я нашел примеры, которые подталкивают меня. Я могу использовать логическое выражение или первые два условия вместе, однако я не уверен, как or
3 условия, особенно когда последнее условие действительно представляет собой два отдельных условия "anded
" вместе.
Любые мысли?
Фред
Ответы
Ответ 1
Последовательность ограничений, связанных с 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);
Ответ 2
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));