在我的hibernate.cfg.xml文件中,其中一个属性是 -
<property name = "transaction.factory_class"> <!--1-->
org.hibernate.transaction.JDBCTransactionFactory <!--2-->
</property> <!--3-->
其他属性很容易理解。但是,当我看到上述财产时,我脑子里浮现出很多问题。
第1行 - 这指定了实现Transaction * Factory *接口的类。
Q1 - 我看过TransactionFactory的java文档,但不知道它到底是什么。这个“工厂”是什么意思?他们为什么不按行 -
将其称为TransactionGenerator生成Hibernate事务实例的合同。
Q2 - TransactionFactory引导我进入交易。这与数据库事务完全相同吗?
Q3 -
单个会话可能跨越多个事务,因为它的概念 会话(应用程序和数据存储区之间的对话) 比交易的概念更粗糙。然而, 打算最多有一个未提交的交易 随时与特定会话相关联。
...会话的概念比交易的概念更粗略。
这用简单的词语意味着什么?
-
但是,最多只有一个未提交 任何时候与特定会话相关联的交易。
你为什么打算这个?
我认为API文档不清楚。使n00b生活变得悲惨。
答案 0 :(得分:8)
Q1 - 原因很清楚。事务创建遵循工厂模式。例如,在应用程序服务器(如JBOSS,WebSphere等)通过JTA API管理事务创建的环境中,您将使用JTA事务工厂来创建事务,并且hibernate将进一步使用该事务。在纯粹的Spring托管环境中,Spring可以配置为使用HibernateTransactionFactory。简而言之,它将采用类似的方式:
IFactory f= FactoryCreatorForYourEnvironment.create();
Transaction t = f.create();
Q2和Q3 - 是的,hibernate事务工厂在底层数据库上创建数据库事务。请注意,会话可能跨越多个事务 - 休眠会话抽象数据库连接。在同一连接上,可以进行多个begin transaction,commit transaction循环。示例:REQUIRE_NEW属性,如果参与的bean(EJB或SPRING bean)。因此,会话是一个更广泛(更粗糙)的术语,如文档中所述。
任何写入,删除,受保护的读取都需要事务。因此会话持有隐式事务。您可以阅读相关的堆栈溢出文章here。
HTH。