8

在我的 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 实例的合约。

Q2 - TransactionFactory 引导我到 Transaction。这与数据库事务完全相同吗?

Q3 -

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

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

用简单的话来说是什么意思?

--

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

你为什么要这样做?

我不认为 API 文档很清楚。让n00b的生活变得悲惨。

4

1 回答 1

9

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

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

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

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

HTH。

于 2013-04-17T04:54:36.557 回答