我瞭解在Java持久性查詢語言之上使用JPA標準構建器的優點。JPA標準構建器 - 用人類可讀的語言編寫
有沒有簡單的方法來解釋如何建立這種查詢? 我需要一個更可讀的解釋,以建立我的查詢,這有一種直觀的方法來查詢我的數據庫。
實施例:
SQL:
SELECT id,status,created_at from transactions where status='1'
and currency='USD' and appId='123' order by id
性判據Builder和元模型:
Map<SingularAttribute<Transaction, ?>, Object> params = ...;
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> cq = cb.createTupleQuery();
Root<Transaction> r = cq.from(Transaction.class);
Predicate p= cb.conjunction();
for (Map.Entry<SingularAttribute<Transaction, ?>, Object> param: params.entrySet())
p = cb.and(p, cb.equal(r.get(param.getKey()), param.getValue()));
cq.multiselect(r.get(Transaction_.id), r.get(Transaction_.status),
r.get(Transaction_.created_at))
.where(p)
.orderBy(cb.asc(r.get(Transaction_.id)));
List<Tuple> result = em.createQuery(cq).getResultList();
這個例子是基於另一個問題: Complex queries with JPA criteria builder
很直觀顯然不是標準API的設計目標之一:)恕我直言,好處不會超過JPQL的可讀性和動態結構的損失 – kostja
除了可讀性和教程的要求之外,還有什麼問題?恕我直言,你可以檢查[動態,JPA 2.0類型安全查詢](http://www.ibm.com/developerworks/library/j-typesafejpa/) – perissf
我投票結束這個問題作爲題外話,因爲它是不是關於編程的問題,而是關於改進已經運行的代碼。 – TylerH