为什么每个应用程序只使用一个SessionFactory对象?

时间:2013-01-19 06:41:52

标签: hibernate spring-mvc

为什么每个应用程序只使用一个SessionFactory对象?每个应用程序使用单个会话工厂对象有什么好处?

4 个答案:

答案 0 :(得分:39)

使用 singleton 设计模式实现会话工厂对象。 SessionFactory的实例是线程安全的,通常在整个应用程序中共享。由于这些对象包含连接信息,hibernate配置信息和映射文件,位置路径,因此这些对象的权重很大。因此,创建实例数将使我们的应用程序重量级。但是会话对象不是线程安全的。简而言之,它是 - 每个应用程序一个SessionFactory对象,每个客户端一个Session对象。

因此,每个DataSource将是一个SessionFactory。您的应用程序可能有多个DataSource,因此您可能在该实例中有多个SessionFactory。但是您不希望在应用程序中多次创建SessionFactory。

<强>优点: 显然它改善了你的应用程序的性能:)

更新 - 摘自Hibernate Doc

  

SessionFactory的内部状态是不可变的。一旦它   创建此内部状态已设置。这个内部状态包括所有   关于对象/关系映射的元数据。

答案 1 :(得分:16)

因为创建SessionFactory是一个非常昂贵的过程,涉及解析hibernate配置/映射属性和创建数据库连接池。创建数据库连接池需要建立数据库连接(即创建Connection个对象)由于找到数据库服务器所需的时间,建立通信信道和交换信息以进行身份​​验证,这会产生开销。

因此,如果您为每个请求创建SessionFactory,则意味着您没有使用数据库连接池来处理您的请求。您必须通过上述过度处理为每个请求设置新连接,而不仅仅是从数据库连接池获取打开的连接。

答案 2 :(得分:3)

每个应用程序有一个关于一个SessionFactory对象的关键点: -

1.Single Data Store: - 它是整个应用程序的单一数据存储。虽然您可以拥有多个SessionFactory,但每个SessionFactory都有一个与之关联的不同数据库。

2.Thread Safe: - SessionFactory是线程安全的,因此很多线程可以访问SessionFactory。

3.Imutable: - 创建SessionFactory对象后,您无法更改或设置Session Facotyr的值。其内部状态在创建时设置。

4.Singleton: - SessionFactory是在应用程序启动时构建的,它遵循单例设计模式。

我希望这会回答你的问题..

有关如何创建sessionfactory的详细信息,请参阅网址:http://techpost360.blogspot.in/2015/07/what-is-hibernate-sessionfactory.html

答案 3 :(得分:3)

雅,很容易理解sessionFactory遵循单例设计模式。因此,您只能在孔应用程序中创建一个对象。 SessionFactory也是线程安全的,因此只有一个线程可以一次执行其代码。 sessionFactory的实例是重加权的,因为它包含连接,hibernate配置,映射文件,位置路径,所以如果你创建了sessionFactory实例的数量,那么你的代码会变得非常繁重。由于这个原因,我们只为一个应用程序使用一个sessionFactory实例。为了提高应用程序的性能,我们在一个应用程序中只使用了一个sessionFactory实例。