如果編譯器能夠對查詢執行語法正確性進行檢查,那麼對於 Java 物件而言, 該查詢就是類型安全的。 Google Dict - Criteria JPQL(JPA 1.0+)的缺陷
Criteria API (JPA 2.0+)使用 Criteria API 開發 Java 編譯器能夠檢查其正確性的查詢,從而減少運行時錯誤,這種查詢優於傳統的基於字符串的 Java Persistence Query Language (JPQL) 查詢。借助使用資料庫函數或匹配模板實例的樣例查詢,程式查詢構造機制的強大威力,並將其與使用預定義語法的 JPQL 查詢進行對比。 import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; ... private List<Author> findAuthorEntities(boolean all, int maxResults, int firstResult) { EntityManager em = getEntityManager(); try { CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); cq.select(cq.from(Author.class)); Query q = em.createQuery(cq); if (!all) { q.setMaxResults(maxResults); q.setFirstResult(firstResult); } return q.getResultList(); } finally { em.close(); } } public int getAuthorCount() { EntityManager em = getEntityManager(); try { CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); Root<Author> rt = cq.from(Author.class); cq.select(em.getCriteriaBuilder().count(rt)); Query q = em.createQuery(cq); return ((Long) q.getSingleResult()).intValue(); } finally { em.close(); } } Referenceshttp://www.infoq.com/presentations/whats-new-and-exciting-in-jpa-20 詳解JPA 2.0動態查詢機制:Criteria API(1) http://developer.51cto.com/art/200911/162722.htm |