EntityManager.createQuery() 執行 JPQL 每次皆需解析分析,影響效能。EJB 3 提供命名查詢:部署時預編譯,類似資料庫預存程序,執行效率更高。
可置於任意實體類上方,建議放相關實體類以便管理。範例:Customer 實體定義 @NamedQuery(name="MyQuery", query="select c from Customer c where id=:id"),使用命名參數 :id。
private Customer queryCustomer(int id) {
return (Customer) em.createNamedQuery("MyQuery")
.setParameter("id", 23)
.getSingleResult();
}
在 Session Bean 中調用即可透過命名查詢高效獲取實體。