java - hibernate 5 : createNativeQuery() in Singleton pattern

标签 java spring hibernate jpa

我有一个 DAO 类,它在内部从 Oracle 序列查询 next_val。

由于此序列未绑定(bind)到任何实体,而只是查询内部逻辑的值,因此每次在 DAO 上调用 getNextValueFromSequence() 方法时,我都会创建 native 查询,如下所示:

Query nextValQuery = entityManager.createNativeQuery(GET_NEXT_SEQUENCE_VAL_SQL);

由于我每次调用该方法时都会创建查询,因此我正在考虑重构它,以便在定义为 Spring bean 的单例中创建 native 查询,以便仅在第一次创建查询 getNextValueFromSequence() 它被调用。

这样做有什么缺点吗? Hibernate session 会出现这种方法的问题吗?

最佳答案

我建议利用 JPA 规范提供的命名查询功能:

@Entity
@NamedNativeQuery(name = "sequenceQuery", query = "<query>", resultClass = Integer.class)

必须在某个实体上定义注释。

然后你会得到如下查询:

Query nextValQuery = entityManager.createNamedQuery("sequenceQuery");

由于该查询将在应用程序启动期间仅创建一次。

关于java - hibernate 5 : createNativeQuery() in Singleton pattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43890809/

相关文章:

java - Hibernate不生成带有注释的表

java - Win64-JNI : UnsatisfiedLinkError: Can't find dependent libraries

java - Spring - 点后截断路径变量 - 注释

java - 如何使用 JSP 在 Spring MVC 中配置验证检查?

mysql - 使用 ONLY_FULL_GROUP_BY mysql 模式 hibernate

java - 出现 OutOfMemoryError 后,Spring REST 服务不会关闭

java - Android - 记住日期的最佳方式

java - Spring - 如何杀死无限循环

java - HTTP 404 错误 :Resource Not Found - STS

java - 如何使用Spring data JPA(JPARepository)实现延迟加载?