2010-09-01 114 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");