我有一個數據源,我使用Spring 3.0.3,Hibernate 3.5.1作爲JPA提供程序,我使用MyBatis 3.0。 2的一些查詢和我的應用程序在Tomcat 6上運行。我有一個HibernateDAO和一個MyBatisDAO,當我使用@Transactional註釋的相同方法調用它們時,它看起來像不共享相同的事務,它們獲得不同的連接。
我該如何讓他們做?如何配置Spring使JPA(Hibernate)和JDBC(JdbcTemplate或MyBatis)共享相同的事務
我試過從DataSourceUtils.getConnection(dataSource)獲取連接,我得到MyBatis使用的是奇怪的,我認爲問題出現在MyBatis配置中,它不能使用JpaTransactionManager。即使多次調用DataSoruceUtils.getConnection也會始終提供相同的連接,這沒關係。
一些google搜索後,我已經試過彈簧儀器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());' –