Не удалось найти ответ на этот вопрос.У нас есть запрос критерия, который должен что-то выводить в SQL по следующим строкам:
select * from x where x.one is null and
(
(x.two = 2 and x.three = 3) or
(x.two = 3 and x.three = 4) or
(x.two = 5 and x.three = 6) or
etc
etc
)
Мы используем Hibernate 3.6.5.Сначала мы собираем добавления в список, а затем приступаем к их добавлению в дизъюнкцию следующим образом:
List<Predicate> ands = new ArrayList<Predicate>();
ands.add(cb.and(cb.equal(attrExpr, 2), cb.equal(attrExpr, 2)));
ands.add(cb.and(cb.equal(attrExpr, 3), cb.equal(attrExpr, 3)));
predicates.add(cb.or(ands.toArray(new Predicate[ands.size()])));
Где cb - это CriteriaBuilder, а attrExpr - это путь к x.two.Сгенерированный SQL выглядит следующим образом:
from
ccp_organization organizati0_
left outer join
ccp_orgattribute_org attributes1_
on organizati0_.id=attributes1_.organization_id
where
(
organizati0_.deleted_=?
or organizati0_.deleted_ is null
)
and (
attributes1_.id=2
and attributes1_.id=2
or attributes1_.id=3
and attributes1_.id=3
or attributes1_.id=4
and attributes1_.id=4
)
И это должно быть:
from
ccp_organization organizati0_
left outer join
ccp_orgattribute_org attributes1_
on organizati0_.id=attributes1_.organization_id
where
(
organizati0_.deleted_=?
or organizati0_.deleted_ is null
)
and (
(attributes1_.id=2
and attributes1_.id=2)
or
(attributes1_.id=3
and attributes1_.id=3)
or
(attributes1_.id=4
and attributes1_.id=4)
)