25

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

4

4 回答 4

42

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

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

优点:显然它提高了您的应用程序的性能:)

更新 - 从休眠文档中提取

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

于 2013-01-19T07:03:56.757 回答
16

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

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

于 2013-01-19T07:21:53.983 回答
3

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

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

2.Thread Safe : – SessionFactory 是线程安全的,所以由于这个特性,许多线程可以访问 SessionFactory。

3.Immutable : - 一旦创建了 SessionFactory 的对象,您就不能更改或设置 Session Facotyr 的值。它的内部状态是在创建时设置的。

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

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

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

于 2015-09-07T09:50:25.717 回答
3

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

于 2016-06-16T20:44:33.210 回答