当使用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.WeblogicJtaPlatformorg.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