CriteriaBuilder JPA 2.0 Eclipselink

时间:2010-09-01 11:34:23

标签: java orm eclipselink jpa-2.0

如果我想要使用EclipseLink和JPA 2.0

那样的东西

SELECT ... FROM ... WHERE name1 = value1 AND name2 = value2 OR name3 = value3

哪种方式最好?在官方说法如:

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而不是.and

的anidate查询

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

查看API'和'和'或'运算符在CriteriaBuilder上,所以查询看起来像:

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

使用“name”示例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");

答案 1 :(得分:0)

或者您可以使用QueryDSL,请参阅http://blog.mysema.com/2010/04/querydsl-as-alternative-to-jpa-2.html下的简介。

QueryDSL是JPA的一个很好的插件(在你的情况下是EclipseLink),但也适用于JDO,集合,SQL / JDBC,Lucene,MongoDB ....