2017-07-03 4 views
0

JPAを使用していますが、検索フィールドが空で検索パラメータがヌルでない場合は、 。パラメータがnullの場合はすべてのレコードを選択します。それ以外の場合は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; 

おかげ

+0

どのようなパラメータですか?あなたのメソッドに渡されるパラメータ?この場合、パラメータに基づいて異なるCriteriaクエリを作成します。 –

答えて

0

は、私は最終的に基準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; 
} 
関連する問題