如果我想要类似 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
查询
有什么想法吗?
最佳答案
查看 CriteriaBuilder 上的 API“和”和“或”运算符,因此查询如下所示:
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");
关于java - CriteriaBuilder JPA 2.0 Eclipse链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3617557/