如果参数为空,则选择所有记录否则返回JPA标准查询中的特定项目
问题描述:
我正在使用JPA,并且我想编写搜索查询以获取所有记录,如果搜索字段为空且搜索参数不为空,则应用条件查询。如果参数为空,则选择所有记录否则返回JPA标准查询中的特定项目
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<String> query = cq.from(String.class);
cq.where(cb.equal(query.get("id"), '1234567'));
TypedQuery<String> q = entityManager.createQuery(cq);
List<String> results = q.getResultList();
return results;
感谢
答
我有一个最终的解决方案使用标准的API。看看下面的代码。
public List <Object> retrieveAll(Object obj) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery <Object> cq = cb.createQuery(Object.class);
Root <Object> objQuery = cq.from(Object.class);
List <Predicate> predicates = new ArrayList <Predicate>();
// You can add as many as Predicate you want.
if (null != obj.getName() && !obj.getName().isEmpty()) {
predicates.add(cb.equal(objQuery.get("Name"), obj.getName()));
}
List <Object> results = new ArrayList <Object>();
if (!predicates.isEmpty()) {
cq.select(objQuery).where(predicates.toArray(new Predicate[] {}));
cq.orderBy(cb.asc(objQuery.get("Name")));
results = entityManager.createQuery(cq).getResultList();
} else {
results = entityManager.createQuery("from Emplyee ORDER BY Name asc").getResultList();
}
return results;
}
什么参数?传递给你的方法的参数?在这种情况下,根据参数创建不同的Criteria查询! –