JPA 2.0 множественное ИЛИ в предложении где - PullRequest
4 голосов
/ 27 июня 2011

Не удалось найти ответ на этот вопрос.У нас есть запрос критерия, который должен что-то выводить в 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)
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...