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

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

其他属性很容易理解。但是,当我看到上述财产时,我想到了许多问题。

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

Q1-我看到了TransactionFactory的Java文档,但不了解它的真正含义。这个“工厂”是什么意思?他们为什么不按行称其为TransactionGenerator-

用于生成Hibernate Transaction实例的合同。

第2季度- TransactionFactory使我转向Transaction。这与数据库事务完全相同吗?

第3季度-

自从
会话(应用程序和数据存储之间的会话)
比事务概念的粒度更粗糙。然而,
打算最多进行一次未提交的交易
随时与特定会话相关联。

...会话的概念比事务的概念更粗糙。

简单来说是什么意思?

-

但是,打算最多有一个未提交的
随时与特定会话相关联的交易。

你为什么要这样做?

我认为API文档并不明确。使n00b的生活变得痛苦。

最佳答案

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

IFactory f= FactoryCreatorForYourEnvironment.create();
Transaction t = f.create();

Q2和Q3 -是的,休眠事务工厂在基础DB上创建数据库事务。请注意,会话可能跨越多个事务-休眠会话抽象数据库连接。在同一连接上,可以有多个开始事务,提交事务周期。示例:REQUIRE_NEW属性,如果参与的bean(EJB或SPRING bean)。因此,会话是文档中提到的一个更广义的术语。

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

HTH。

08-19 11:12