首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用什么: JPQL还是Criteria API?

使用什么: JPQL还是Criteria API?
EN

Stack Overflow用户
提问于 2010-10-05 03:22:55
回答 2查看 28.7K关注 0票数 71

我的Java应用程序使用JPA进行对象持久化。业务域非常简单(只有三个类是持久化的,每个类都有3-5个属性)。查询也很简单。问题是我应该使用哪种方法: JPQL还是Criteria API?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-05 04:17:54

我很确定这已经在这里讨论过了,但是我找不到存在的问题。所以,这是我对这个问题的观点:

  • 我发现JPQL查询更容易写/读。
  • 我发现Criteria应用编程接口非常适合构建动态查询。

这基本上就是您在Hibernate: Criteria vs. HQL中可以找到的。

但是JPA 2.0 Criteria API和Hibernate的Criteria API之间有一个值得一提的主要区别: JPA 2.0 Criteria API是一种类型安全API,因此提供了编译时检查、代码完成、更好的重构支持等。然而,我并没有发现JPQL的好处超过了它的易用性。

总而言之,我更喜欢JPQL,除了动态查询(例如,多条件搜索功能)。

相关问题

更多资源

  • Hibernate Querying 102 : Criteria API
票数 84
EN

Stack Overflow用户

发布于 2016-01-31 04:20:17

我之前回答了一个类似的问题,为了社区的利益,我将在这里重新发布我的答案。我将假设您使用的是应用服务器,而不是我下面的答案。

Criteria API的存在允许以类型安全的方式构造动态SQL查询,从而防止SQL注入。否则,您将把SQL字符串连接在一起,这既容易出错,又有安全风险:即SQL注入。这将是您唯一想要使用Criteria API的时候。

如果查询基本上保持不变,但只需要接受不同的参数,那么您应该使用带注释的@NamedQueries,它更简单,预编译,可以缓存在二级缓存中,并且可能在服务器启动时进行验证。

这基本上是关于标准查询与@NamedQueries的经验法则。根据我的经验,你很少需要Criteria API,但它存在于需要它的极少数情况下是一件好事。

希望这能有所帮助。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3858406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档