簡體   English   中英

如果參數為null,則選擇所有記錄,否則返回JPA Criteria查詢中的特定項

[英]Select all records if parameter is null else return specfic item in JPA Criteria query

我正在使用JPA,並且如果搜索字段為空並且如果搜索參數不為null,那么我想編寫搜索查詢以獲取所有記錄,然后應用條件查詢。

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM