2010-09-01 5 views
3

Если я хочу что-то подобное с EclipseLink и JPA 2,0CriteriaBuilder JPA 2,0 EclipseLink

SELECT ... FROM ... WHERE name1 = значение1 И name2 = значение2 ИЛИ name3 = value3

Каков наилучший способ? В Официальном сказать Somthing как:

cq.where(cb.equal(pet.get(Pet_.name), "Fido") 
    .and(cb.equal(pet.get(Pet_.color), "brown"); 

http://download.oracle.com/javaee/6/tutorial/doc/gjivm.html#gjiwu

но с EclipseLink невозможное, потому что cb.equal(pet.get(Pet_.name), "Fido") является Predicate и не anidate запрос с .and

Любые идеи?

ответ

3

Глядя на API «и» и «или» операторы на CriteriaBuilder поэтому запрос будет выглядеть следующим образом:

cq.where(cb.and(
    cb.equal(pet.get(Pet_.name), "Fido"), 
    cb.equal(pet.get(Pet_.color), "brown"))); 

Использование «имя» пример, когда пункт вызова будет:

cq.where(cb.or(
    cb.and(cb.equal(BeanName_.name1, "value1"), 
    cb.equal(BeanName_name2, "value2")), 
    cb.equal(BeanName_.name3, "value3"))); 

, если вы хотите использовать параметры просто замените жестко закодированные значения (т.е. "value1".) с параметрами:

cb.parameter(String.class, "value1"); 
Смежные вопросы