我有一个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");


因此,在应用程序启动期间查询将仅创建一次。

10-05 22:50