2010-09-01 115 views
3

如果我想类似的东西用的EclipseLink和JPA 2.0CriteriaBuilder JPA 2.0的EclipseLink

SELECT ... FROM ... WHERE名1 =值AND 2 =值2 OR NAME3 =值3

哪种方法最好?在公报说财产以后这样的:

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

但IMPOSIBLE与EclipseLink的,因为cb.equal(pet.get(Pet_.name), "Fido")Predicate,不与.and

任何想法anidate查询?

回答

3

综观API“与”和“或”运营商都在CriteriaBuilder所以查询看起来像:

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

使用“名”例如where子句电话是:

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");