我有一个DAO类,内部在从Oracle序列中查询next_val。
由于此序列未绑定到任何实体,而只是查询内部逻辑的值,因此每次在DAO上调用getNextValueFromSequence()
方法时,我都会创建本机查询,如下所示:
Query nextValQuery = entityManager.createNativeQuery(GET_NEXT_SEQUENCE_VAL_SQL);
在每次调用该方法时都在创建查询时,我正在考虑对其进行重构,以将在单例中创建的本机查询定义为Spring bean,以便仅在我的
getNextValueFromSequence()
第一次创建该查询时调用。这样做有什么缺点吗? Hibernate会议会给这种方法带来问题吗?
最佳答案
我建议利用JPA规范提供的命名查询功能:
@Entity
@NamedNativeQuery(name = "sequenceQuery", query = "<query>", resultClass = Integer.class)
注释必须在某个实体上定义。
然后,您将获得查询,如下所示:
Query nextValQuery = entityManager.createNamedQuery("sequenceQuery");
因此,在应用程序启动期间查询将仅创建一次。