我需要创建一个使用带有多个参数的JPA Criteria API的搜索方法 . 现在的问题是不是每个参数都是必需的 . 因此有些可能为null,并且它们不应包含在查询中 . 我已经用CriteriaBuilder尝试了这个,但我看不出如何让它工作 .
使用Hibernate Criteria API,这非常简单 . 只需创建条件,然后添加限制 .
Criteria criteria = session.createCriteria(someClass.class);
if(someClass.getName() != null) {
criteria.add(Restrictions.like("name", someClass.getName());
}
我怎么能用JPA的Criteria API实现同样的目标?
3 回答
概念是构造javax.persistence.Predicate的数组,其中只包含我们想要使用的谓词:
要查询的示例实体:
查询本身:
看看这个网站JPA Criteria API . 有很多例子 .
Update: Providing a concrete example
让我们搜索余额低于特定值的帐户:
首先创建一个Criteria Builder
要获取结果集参数并运行查询:
BTW:entityManager被注入EJB / Service / DAO中的某个地方 .
Mikko的答案很精彩 . 只有改变我需要做的,是替换:
cq.select(customer).where(predicates.toArray(new Predicate[]{}));
有:
某处从原始列表到数组的转换不起作用 .