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

Suk*_*uta 5 migration hibernate

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

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

在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配置中这个类的合适替代品?

谷歌搜索我的成功有限,所以任何答案都将不胜感激!

Suk*_*uta 6

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

相应的属性应该是:

<property name="hibernate.transaction.coordinator_class">org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl</property>
Run Code Online (Sandbox Code Playgroud)

或使用这样的短名称:

<property name="hibernate.transaction.coordinator_class">jdbc</property>
Run Code Online (Sandbox Code Playgroud)

来自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对话,后者根据后端事务策略表示给定Session的"事务上下文".用户通常不需要关心区别.

此处记录了此更改,因为它可能会影响您的引导程序配置.以前的应用程序会指定hibernate.transaction.factory_class并引用org.hibernate.engine.transaction.spi.TransactionFactory FQN,而新的合约是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)