私は単一のデータソースを持っていますが、私はSpring 3.0.3、JPAプロバイダとしてHibernate 3.5.1を使用しています。いくつかのクエリでは2つ、Tomcat 6では私のアプリケーションは動いています。HibernateDAOとMyBatisDAOを持っています。@Transactionalで注釈付けされた同じメソッドから両方を呼び出すと、同じトランザクションを共有していないようです。
どうすればいいですか?JPA(Hibernate)とJDBC(JdbcTemplateまたはMyBatis)が同じトランザクションを共有するようにSpringを構成する方法
DataSourceUtils.getConnection(dataSource)から接続しようとしましたが、MyBatisで使用されているものが見つかりました。これはMyBatis設定に問題があると思っていて、JpaTransactionManagerを使用できません。 DataSourceUtils.getConnectionを複数回呼び出しても、常に同じ接続が得られます。これは大丈夫です。いくつかは、(Tomcatが実際にそれを使用している場合、私は知りませんが:))私は春-楽器Tomcatのクラスローダを試してみたグーグルの後
部分のApplicationContext
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
<property name="driverClassName" value="${database.driverClassName}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
</bean>
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:META-INF/mybatis/mybatis-config.xml" />
</bean>
部分MyBatisのコンフィグ
<settings>
<setting name="cacheEnabled" value="false" />
<setting name="useGeneratedKeys" value="false" />
<setting name="defaultExecutorType" value="REUSE" />
<setting name="lazyLoadingEnabled" value="false"/>
</settings>
部分的にpersistence.xml
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
はいちょうどjpaの方言を設定する 'emf.setJpaDialect(new HibernateJpaDialect());' –