Hibernate 在Spring上下文中创建JPA EntityManager时出现问题

Hibernate 在Spring上下文中创建JPA EntityManager时出现问题,hibernate,spring,jpa,jta,entitymanager,Hibernate,Spring,Jpa,Jta,Entitymanager,我有一个JPA/Spring应用程序,它使用Hibernate作为JPA提供者。在代码的一部分中,我必须使用新操作符在应用程序中手动创建DAO,而不是使用SpringDI。当我这样做时,@PersistenceContext注释不是由Spring处理的 在创建DAO的代码中,我有一个EntityManagerFactory,用于设置entityManager,如下所示: @PersistenceUnit private EntityManagerFactory entityManagerFact

我有一个JPA/Spring应用程序,它使用Hibernate作为JPA提供者。在代码的一部分中,我必须使用新操作符在应用程序中手动创建DAO,而不是使用SpringDI。当我这样做时,@PersistenceContext注释不是由Spring处理的

在创建DAO的代码中,我有一个EntityManagerFactory,用于设置entityManager,如下所示:

@PersistenceUnit
private EntityManagerFactory entityManagerFactory;

MyDAO dao = new MyDAOImpl();
dao.setEntityManager(entityManagerFactory.createEntityManager());
问题是,当我执行此操作时,会出现休眠错误:

Could not find UserTransaction in JNDI [java:comp/UserTransaction]
以下是spring实体管理器工厂配置:

<bean id="myAppTestLocalEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="myapp-core" />
    <property name="persistenceUnitPostProcessors">
        <bean class="com.myapp.core.persist.util.JtaPersistenceUnitPostProcessor">
            <property name="jtaDataSource" ref="myappPersistTestJdbcDataSource" />
        </bean>
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop>
            <prop key="hibernate.transaction.manager_lookup_class">com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup</prop>
        </props>
    </property>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <!-- The following use the PropertyPlaceholderConfigurer but it doesn't work in Eclipse -->
            <property name="database" value="$DS{hibernate.database}" />
            <property name="databasePlatform" value="$DS{hibernate.dialect}" />

org.hibernate.transaction.JTATransactionFactory
com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup

它与EntityManager无关。这是一个事务配置问题。显然,org.hibernate.transaction.JTATransactionFactory强制进行JNDI查找


切换到com.atomikos.icatch.jta.hibernate3.AtomikosJTATransactionFactory,一切正常。

再次,问答+1。