【文档摘要】J2EE Persistence - Introduction to the Java Persistence API【Querying Entities】

本文介绍了Java Persistence API (JPA) 中的两种查询方式:JPQL(Java Persistence Query Language)和Criteria API。JPQL虽然与SQL相似,具有较好的可读性,但不类型安全,可能导致效率问题。而Criteria API则是类型安全的,性能优于动态JPQL,但使用上更为复杂。通过示例展示了如何使用JPQL查询财务记录,并指出其在缓存和效率上的挑战。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值