使用什么:JPQL还是标准API?[已关闭]

2022-08-31 14:02:25

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


答案 1

我很确定这在SO上已经涵盖了,但我找不到现有的问题。所以,这是我对这个问题的看法:

  • 我发现JPQL查询更容易编写/阅读。
  • 我发现标准API非常适合构建动态查询。

这基本上就是你在Hibernate:Criteria vs. HQL中找到的

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

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

相关问题

更多资源


答案 2

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

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

如果查询基本相同,但只需要接受不同的参数,则应使用更简单,预编译,可以缓存在辅助缓存中并可能在服务器启动期间验证的注释。@NamedQueries

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

希望这有帮助。


推荐