我的Java应用程序使用JPA进行对象持久化。业务域非常简单(只有三个类是持久化的,每个类都有3-5个属性)。查询也很简单。问题是我应该使用哪种方法: JPQL还是Criteria API?
发布于 2010-10-05 04:17:54
我很确定这已经在这里讨论过了,但是我找不到存在的问题。所以,这是我对这个问题的观点:
这基本上就是您在Hibernate: Criteria vs. HQL中可以找到的。
但是JPA 2.0 Criteria API和Hibernate的Criteria API之间有一个值得一提的主要区别: JPA 2.0 Criteria API是一种类型安全API,因此提供了编译时检查、代码完成、更好的重构支持等。然而,我并没有发现JPQL的好处超过了它的易用性。
总而言之,我更喜欢JPQL,除了动态查询(例如,多条件搜索功能)。
相关问题
更多资源
发布于 2016-01-31 04:20:17
我之前回答了一个类似的问题,为了社区的利益,我将在这里重新发布我的答案。我将假设您使用的是应用服务器,而不是我下面的答案。
Criteria API的存在允许以类型安全的方式构造动态SQL查询,从而防止SQL注入。否则,您将把SQL字符串连接在一起,这既容易出错,又有安全风险:即SQL注入。这将是您唯一想要使用Criteria API的时候。
如果查询基本上保持不变,但只需要接受不同的参数,那么您应该使用带注释的@NamedQueries
,它更简单,预编译,可以缓存在二级缓存中,并且可能在服务器启动时进行验证。
这基本上是关于标准查询与@NamedQueries
的经验法则。根据我的经验,你很少需要Criteria API,但它存在于需要它的极少数情况下是一件好事。
希望这能有所帮助。
https://stackoverflow.com/questions/3858406
复制相似问题