当使用JtaTransactionManager时,为什么使用未在Spring服务中提交的EntityManager进行JPA更改?
我需要在Spring Service
使用org.springframework.transaction.jta.JtaTransactionManager
作为我的TransactionManager
。 但是,它不会对JPA实体进行任何更改。 我知道,如果我使用JpaTransactionManager
它的工作原理。 但是,我需要JtaTransactionManager
。 所以,请不要建议使用JpaTransactionManager
。 我的Spring Service
类是:
package testspring.view; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import testspring.model.Regions; @Service public class HelloBS { @PersistenceContext private EntityManager entityManager; public HelloBS() { super(); } @Transactional() public void doSomething() { Regions region = new Regions(); region.setRegionName("Antarctica"); entityManager.persist(region); } }
我的Spring xml配置是:
org.hibernate.dialect.Oracle10gDialect AUTO class org.hibernate.cfg.ImprovedNamingStrategy UTF-8 true UTF-8 true true true true auto
如何在使用JtaTransactionManager
提交的JPA实体中进行更改?
感谢@Bond – Java Bond ,解决方案是执行以下步骤:
- 设置
jtaDataSource
而不是dataSource
。 - 使用
代替
。 - 添加
。org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform org.hibernate.service.jta.platform.internal
包中有不同的类,可用于不同的应用程序服务器。
所以最终的Spring xml配置是:
org.hibernate.dialect.Oracle10gDialect AUTO class org.hibernate.cfg.ImprovedNamingStrategy UTF-8 true UTF-8 true true true true auto org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform