需要了解Hibernate配置的transaction.factory_class

dav*_*ine 8 java xml hibernate

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

<property name = "transaction.factory_class"> <!--1-->
org.hibernate.transaction.JDBCTransactionFactory <!--2-->
</property> <!--3-->
Run Code Online (Sandbox Code Playgroud)

其他属性很容易理解.但是,当我看到上述财产时,我脑子里浮现出许多问题.

第1行 -它指定实现Transaction*Factory*接口的类.

Q1 -我看过TransactionFactory的java文档,但不明白它到底是什么.这个"工厂"是什么意思?他们为什么不把它称为TransactionGenerator -

生成Hibernate Transaction实例的合同.

Q2 - TransactionFactory引导我进行交易.这与数据库事务完全相同吗?

第3季 -

单个会话可能跨越多个事务,因为会话的概念(应用程序和数据存储区之间的对话)的粒度比事务的概念更粗略.但是,打算在任何时候最多有一个与特定会话相关联的未提交的事务.

......会话的概念比交易的概念更粗略.

这用简单的词语意味着什么?

-

但是,打算在任何时候最多有一个与特定会话相关联的未提交的事务.

你为什么打算这个?

我不认为API文档是清楚的.使n00b生活变得悲惨.

mag*_*ggu 8

Q1 - 推理很清楚.事务创建遵循工厂模式.例如,在应用程序服务器(如JBOSS,WebSphere等)通过JTA API管理事务创建的环境中,您将使用JTA事务工厂来创建事务,并且hibernate将进一步使用该事务.在纯粹的Spring托管环境中,Spring可以配置为使用HibernateTransactionFactory.简而言之,它将遵循类似的方式:

IFactory f= FactoryCreatorForYourEnvironment.create();
Transaction t = f.create();
Run Code Online (Sandbox Code Playgroud)

Q2和Q3 - 是的,hibernate事务工厂在底层数据库上创建数据库事务.请注意,会话可能跨越多个事务 - 休眠会话抽象数据库连接.在同一连接上,可以进行多个begin transaction,commit transaction循环.示例:REQUIRE_NEW属性,如果参与的bean(EJB或SPRING bean).因此,会话是文档中提到的更广泛(更粗糙)的术语.

任何写入,删除,受保护的读取都需要事务.因此会话持有隐式事务.您可以在此处阅读相关的堆栈溢出文章.

HTH.