【问题标题】:Problem creating JPA EntityMananger in Spring Context在 Spring 上下文中创建 JPA EntityMananger 的问题
【发布时间】:2023-03-26 18:45:01
【问题描述】:

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

在我创建 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}" />

【问题讨论】:

  • 再次,+1 提问和回答。

标签: hibernate spring jpa jta entitymanager


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2015-11-24
    相关资源
    最近更新 更多