我有一个 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/