Hibernate ORing два критерия - PullRequest
       0

Hibernate ORing два критерия

2 голосов
/ 25 августа 2011

Во-первых, речь идет об ИЛИ двух критериях, а не двух.

В рамках запроса я пытаюсь сделать это:

from voters v
left join addresses a on v.addressId = a.addressId
left join precincts p on a.areaId    = a.precinctId
left join overlaps  o on o.areaId1   = p.areaId
where p.areaId = ? or o.areaId2 = ?

а два? одинаковое значение. Я получил немного этого, но теперь застрял. Вот что у меня есть

criteria = session.createCriteria(Voter.class);
addressCriteria = criteria.createCriteria("address");
precinctCriteria = addressCriteria.createCriteria("precinct");
overlapsCriteria = precinctCriteria.createCriteria("overlaps");

Я бы хотел сделать следующее, но это не работает.

SimpleExpression lhs = Restrictions.eq("precinct.id", areaId);
SimpleExpression rhs = Restrictions.eq("overlaps.id", areaId);
LogicalExpression criterion = Restrictions.or(lhs, rhs);

Итак, что я действительно должен делать? Я думаю, что это включает createAlias ​​(...), но я не уверен, как. И к каким критериям я бы добавил этот последний критерий? Первый?

1 Ответ

2 голосов
/ 25 августа 2011

Используйте Disjunction:

Disjunction dis = Restrictions.disjunction();
dis.add(Restrictions.eq("precinct.id", areaId));
dis.add(Restrictions.eq("overlaps.id", areaId));
criteria.add(dis);

Обратите внимание, что вам может понадобиться псевдоним precinct и overlaps.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...