需要了解Hibernate配置中的transaction.factory_class是什么意思。

8

在我的hibernate.cfg.xml文件中,其中一个属性是 -

<property name = "transaction.factory_class"> <!--1-->
org.hibernate.transaction.JDBCTransactionFactory <!--2-->
</property> <!--3-->

其他属性很容易理解。但是,当我看到上面的属性时,我的脑海中浮现出许多问题。 line 1 - 这指定了实现TransactionFactory接口的类。
Q1 - 我看了TransactionFactory的Java文档,但并没有真正理解它的含义。这里的“工厂”是什么意思?为什么不按照下面的语句称其为TransactionGenerator?
Contract for generating Hibernate Transaction instances.
Q2 - TransactionFactory让我想到了Transaction。这是否与数据库事务完全相同?
Q3 -
单个会话可能涵盖多个事务,因为会话(应用程序和数据存储之间的对话)的概念比事务的概念更粗略。但是,打算在任何时间内将至多一个未提交的Transaction与特定会话相关联。
...会话的概念比事务的概念更粗略。
这句话的简单含义是什么?
然而,打算在任何时间内将至多一个未提交的Transaction与特定会话相关联。为什么打算这样做?
我不认为API文档很清楚。这使得新手的生活很艰难。
1个回答

9

Q1 - 推理很清晰。交易创建遵循工厂模式。例如,在应用服务器(如JBOSS,WebSphere等)通过JTA API管理事务创建的环境中,您将使用JTA事务工厂来创建事务,并且这些事务将进一步由Hibernate使用。在纯Spring管理的环境中,Spring可以配置为使用HibernateTransactionFactory。简而言之,它将遵循类似于以下方式:

IFactory f= FactoryCreatorForYourEnvironment.create();
Transaction t = f.create();
Q2和Q3 - 是的,Hibernate事务工厂在底层数据库上创建数据库事务。请注意,一个会话可能跨越多个事务 - Hibernate会话抽象了数据库连接。在同一连接上,可以进行多个开始事务、提交事务周期。例如:如果参与的bean(EJB或SPRING bean)具有REQUIRE_NEW属性,则会话是一个更广泛(粗略)的术语,如文档中所述。
任何写入、删除、受保护的读取都需要事务。因此,会话持有隐式事务。您可以阅读相关的堆栈溢出文章here
希望对你有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接