JPA 2.0 引入標準化 Criteria API,等價於面向物件的 JPQL,讓開發者以物件導向方法建構查詢,避免字串操作。API 基於元模型,提供架構層級的中繼資料,支援強型別查詢與持久化單元邏輯結構瀏覽。
註解處理器可依元模型生成靜態元模型類別(如 Employee_ 對應 Employee 實體),包含持久化狀態與關聯屬性。開發者也可手動編寫。
CriteriaBuilder:em.getCriteriaBuilder()CriteriaQuery<T>:cb.createQuery(Employee.class)Root<T>:cq.from(Employee.class)select、where)em.createQuery(cq).getResultList()CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);
Root<Employee> emp = cq.from(Employee.class);
cq.select(emp);
cq.where(cb.equal(emp.get(Employee_.lastName), "Smith"));
List<Employee> rows = em.createQuery(cq).getResultList();
動態版本透過 emp.getModel() 取得 EntityType,再用 getSingularAttribute 導航。字串版本雖簡便但失去型別安全。TypedQuery 為 JPA 2.0 新介面,感知回傳型別。