小编mle*_*que的帖子

在JPA/Hibernate中使用Spring定义的transactionManager

假设您将JPA与Spring一起使用,将Hibernate用作JPA实现.JPA事务模式是"JTA",因此您需要将容器transactionManager传递给Hibernate.经典的答案是设置hibernate.transaction.manager_lookup_class为服务器的匹配类.

但是,我认为这取决于服务器特定配置是一种耻辱,因为您已经在Spring中找到了transactionManager <tx:jta-transaction-manager>.

有没有办法使用类似的配置将此事务管理器提供给Hibernate

 <bean id="entityManagerFactory"
  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="persistenceUnitName" value="persistence_unit_name"/>
  <property name="jpaVendorAdapter">
   <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
  </property>
  <property name="jpaProperties">
   <props>
    <prop key="hibernate.transaction.manager_lookup_class">
     org.hibernate.transaction.SunONETransactionManagerLookup
    </prop>
   </props>
  </property>
 </bean>

 <tx:jta-transaction-manager/>
Run Code Online (Sandbox Code Playgroud)

目标是摆脱org.hibernate.transaction.SunONETransactionManagerLookup财产.顺便说一句,我真的有两个不同的服务器实现.

编辑:没有事务管理器配置,Hibernate在创建EntityManagerFactory时会出现问题:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [file:/C:/configuration/afoCuad-metier-ear/entitymanager-base-context.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: fr.tm.ima.cuad-afoCuad-metier-ejb-PU] Unable to build EntityManagerFactory
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:529)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:495)
at …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa jta

10
推荐指数
2
解决办法
2万
查看次数

标签 统计

hibernate ×1

java ×1

jpa ×1

jta ×1

spring ×1