当前位置: 首页 > 知识库问答 >
问题:

Hibernate 5:Singleton模式中的createNativeQuery()

万俟震博
2023-03-14

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

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

Query nextValQuery = entityManager.createNativeQuery(GET_NEXT_SEQUENCE_VAL_SQL);

由于每次调用该方法时都要创建查询,因此我想重构该方法,以便在定义为Springbean的单例中创建本机查询,以便只在第一次调用我的getNextValueFromSequence()时创建查询。

这样做有什么缺点吗?Hibernate会话会给这种方法带来问题吗?

共有2个答案

文增
2023-03-14

查询实例以会话为界,因此重用相同的查询实例不是一个好主意。

胡安怡
2023-03-14

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

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

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

然后得到如下查询:

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

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

 类似资料:
  • 问题内容: 编辑:回答-错误是方法不是静态的 我使用了Singleton设计模式 我的问题是如何在 另一个 类中创建Singleton 类的对象? 我试过了: 什么是正确的代码? 谢谢,斯宾塞 问题答案: 是正确的方法。确保您的方法确实正确。 由于您的实现远非安全- 您的对象可以通过反射实例化,因此您可能想基于

  • 问题内容: 默认情况下,我们在Spring容器中将bean作为单例,如果我们有一个基于Spring框架的Web应用程序,那么在这种情况下,我们真的需要实现Singleton设计模式来保存全局数据,而不仅仅是通过spring创建bean 。 问题答案: Spring中的单例豆和单例模式有很大不同。Singleton模式表示,每个类加载器将只创建一个特定类的一个实例。 Spring单例的范围描述为“每

  • 单例模式确保每个指定的类只存在一个实例对象,并且可以全局访问那个实例。一般情况下会使用延时加载的策略,只在第一次需要使用的时候初始化。 注意:在 iOS 中单例模式很常见,NSUserDefaults.standardUserDefaults() 、 UIApplication.sharedApplication() 、 UIScreen.mainScreen() 、 NSFileManager.

  • 另外,我将.kt反编译回Java。在companion类中,我得到以下代码。 } 1)如何通过在kotlin同伴对象中使用lateinit或lazy来实现线程安全、单例?正如我所看到的,反编译的java代码在initialize函数中有一个synchronized调用,但在synchronize正文中没有。

  • 问题内容: 最近,我碰上了这篇文章如何写在Node.js的一个单 我知道以下 状态的文档: 第一次加载模块后将对其进行缓存。多次调用可能不会导致模块代码多次执行。 因此,似乎每个需要的模块都可以轻松地用作单例,而无需单例样板代码。 题: 上面的文章是否提供了有关创建单例的解决方案? 问题答案: 这基本上与nodejs缓存有关。干净利落。 https://nodejs.org/api/modules

  • 问题内容: 最近,我碰到了C ++的Singleton设计模式的实现/实现。它看起来像这样(我从现实生活的示例中采用了它): 从该声明中,我可以推断出实例字段是在堆上初始化的。这意味着存在内存分配。对我来说,完全不清楚的是何时确切地将要释放内存?还是有错误和内存泄漏?似乎实现中存在问题。 我的主要问题是,如何以正确的方式实施它? 问题答案: 在2008年,我提供了Singleton设计模式的C +