SpringコンテキストでJPA EntityManangerを作成する問題
-
26-09-2019 - |
質問
私は、JPAプロバイダとしてHibernateはを使用してJPA / Springアプリケーションを持っています。コードの一部では、私は手動で新しい演算子ではなく、使用春のDIと私のアプリケーションでDAOを作成する必要があります。私はこれを行うと、@PersistenceContext注釈は春で処理されていません。
私はEntityManagerを設定するために使用されるのEntityManagerFactoryを持って、私はDAOを作成する私のコードでは、次のように:
@PersistenceUnit
private EntityManagerFactory entityManagerFactory;
MyDAO dao = new MyDAOImpl();
dao.setEntityManager(entityManagerFactory.createEntityManager());
問題は、私はこれを行うとき、私はHibernateのエラーを取得するということです
Could not find UserTransaction in JNDI [java:comp/UserTransaction]
ここで春エンティティマネージャの工場出荷時の設定です。
<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}" />
解決
それはEntityManagerのとは何の関係もありません。これは、トランザクションの設定の問題です。どうやらorg.hibernate.transaction.JTATransactionFactory力JNDIルックアップています。
com.atomikos.icatch.jta.hibernate3.AtomikosJTATransactionFactory、すべての作品に切り替えます。
所属していません StackOverflow