org.hibernate.transaction.JDBCTransactionFactory类在Hibernate 5中的位置是什么?

时间:2017-03-27 23:03:57

标签: hibernate migration

我目前正在开发一个从Hibernate 3.x升级到5.x的项目。现在,hibernate配置xml中的一个属性如下:

<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>

在Hibernate 5中,上面定义的这个特定类以及 org.hibernate.transaction 包似乎不存在。此类在版本3.x中可用(https://docs.jboss.org/hibernate/envers/3.6/javadocs/org/hibernate/transaction/JDBCTransactionFactory.html)。 根据Hibernate 5 api文档(https://docs.jboss.org/hibernate/orm/5.0/javadocs/

没有这样的类

Hibernate 5是否弃用了这个特定的包以及它所包含的所有类?我检查了所有必需的Hibernate 5罐,但无法在任何地方找到此类 org.hibernate.transaction.JDBCTransactionFactory 。在Hibernate 5配置中,什么可以替代这个类?

我在谷歌搜索方面取得了有限的成功,所以任何答案都会受到赞赏!

2 个答案:

答案 0 :(得分:6)

好的,经过进一步研究,我发现Hibernate 5中的Transaction SPI经历了一次重大变化!

相应的属性应为:

<property name="hibernate.transaction.coordinator_class">org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl</property>

或使用这样的短名称:

<property name="hibernate.transaction.coordinator_class">jdbc</property>

来自https://github.com/hibernate/hibernate-orm/blob/5.0/migration-guide.adoc#transactions

  

事务SPI也作为5.0的一部分进行了重大的重新设计。从用户的角度来看,这通常仅在配置方面进入视野。以前,应用程序可以直接通过org.hibernate.Transaction API处理不同的后端事务策略。在5.0中,这里添加了一个间接级别。 org.hibernate.Transaction的API实现现在始终相同。在后端,org.hibernate.Transaction impl与org.hibernate.resource.transaction.TransactionCoordinator对话,后者代表&#34;事务上下文&#34;根据后端事务策略为给定的会话。用户通常不需要关心区别。

     

此处记录了此更改,因为它可能会影响您的引导程序配置。以前的应用程序会指定hibernate.transaction.factory_class并引用org.hibernate.engine.transaction.spi.TransactionFactory FQN, with 5.0新合同是org.hibernate.resource.transaction.TransactionCoordinatorBuilder并使用hibernate.transaction.coordinator_class设置。有关其他详细信息,请参阅org.hibernate.cfg.AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY JavaDocs。

     

识别以下短名称:jdbc ::(非JPA应用程序的默认值)表示使用基于JDBC的事务(org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl)jta ::说使用基于JTA的交易(org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl)

答案 1 :(得分:0)

根据http://lists.jboss.org/pipermail/hibernate-dev/2015-November/013625.html,而不是

<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>

试试这个

<property name="transaction.factory_class">org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorBuilderImpl</property>