需要了解Hibernate配置的transaction.factory_class

时间:2013-04-17 00:37:28

标签: java xml hibernate

在我的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生活变得悲惨。

1 个答案:

答案 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。