需要了解Hibernate配置的transaction.factory_class

Posted

技术标签:

【中文标题】需要了解Hibernate配置的transaction.factory_class【英文标题】:Need to understand transaction.factory_class of Hibernate configuration 【发布时间】:2013-04-09 14:16:30 【问题描述】:

在我的 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。这和数据库事务完全一样吗?

第三季度-

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

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

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

--

但是,它的目的是最多有一个未提交的 随时与特定 Session 关联的事务。

你为什么要这样做?

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

【问题讨论】:

【参考方案1】:

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 属性。所以会话是文档中提到的更广泛(更粗略)的术语。

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

HTH。

【讨论】:

以上是关于需要了解Hibernate配置的transaction.factory_class的主要内容,如果未能解决你的问题,请参考以下文章

Struts + Hibernate:@SessionTarget 不工作

hibernate之小白一

hibernate标示符的意义-不同的对象标示符必须不一样

求对hibernate源码了解的大神!关于hibernate4及以上版本---不配置事务,dao类继承自HibernateDaoSupport

Hibernate--从认识到细化了解

如何关闭log4j中配置的spring或者hibernate的日志信息