JPQL (Java Persistence Query Language):JPQL并非类型安全,需要做类型转换,但是JPQL更加类似SQL,比起Criteria API来说,它更加可读。
JPQL Dynamic Query?(这个和J2EE文档解释是否相符?)
@PersistenceContext(unitName="dq")
EntityManager em;
public long queryFinancialRecordsOfDept(String deptName, String companyName) {
String query = "SELECT d.records " +
"FROM Department d " +
"WHERE d.name = '" + deptName +
"' AND " +
" d.company.name = '" + companyName +
"'";
return em.createQuery(query, Long.class).getSingleResult();
}
因为Query是每次生成,每次都可可能不一样,所以很难做cache。效率相对比较低。
Criteria API(typesafe):Criteria API比起Dynamic JPQL来说,性能更好。因为Dynamic JPQL每次都需要做解析。同时Criteria API是类型安全的,不需要做类型转换。但是比起JPQL来说使用起来更加繁琐。
参考资料:
http://www.kumaranuj.com/2013/06/jpa-2-dynamic-queries-vs-named-queries.html
https://docs.oracle.com/javaee/7/tutorial/doc/persistence-intro004.htm#GJISE
本文介绍了Java Persistence API (JPA) 中的两种查询方式:JPQL(Java Persistence Query Language)和Criteria API。JPQL虽然与SQL相似,具有较好的可读性,但不类型安全,可能导致效率问题。而Criteria API则是类型安全的,性能优于动态JPQL,但使用上更为复杂。通过示例展示了如何使用JPQL查询财务记录,并指出其在缓存和效率上的挑战。
687

被折叠的 条评论
为什么被折叠?



