java - 如果参数为 null,则选择所有记录,否则返回 JPA Criteria 查询中的特定项目

标签 java jpa criteria

我正在使用 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;

谢谢

最佳答案

我最终使用 Criteria 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;
}

关于java - 如果参数为 null,则选择所有记录,否则返回 JPA Criteria 查询中的特定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44885939/

相关文章:

java - 以列表项作为结果的 Android SearchView 小部件

使用 Spring Boot 对 Elasticsearch/AWS 进行 Java API 运行状况检查

java - invokeAll 它究竟是如何工作的? ( fork 连接)

java - JPA 查询异常意外(

java - JPQL 查询未返回预期结果

java - PKCS#11 keystore 在成功尝试输入密码后不验证密码

java - 如何更改 JPA 中现有实体的类型

Yii 使用标准

java - Hibernate:使用集合条件(HashSet)

java - 如何在 hibernate 中使用条件多对多单向关联获取列表?