Mybatis和JPA混用因事務管理器錯誤使用導致JPA的save方法失效

參考博文: spring-data-jpa中save不觸發數據庫insert語句的問題


這篇博文記錄一個錯誤,當Mybatis 和JPA 混合使用的時候,如果你不小心設置了JDBC 事務管理器,那麼Spring Data JPA 的save方法可能因爲衝突導致方法失效。

造成的影響就是無論怎麼操作,雖然JPA save 對象保存成功了但是就是數據庫中找不到插入的記錄。

錯誤示範如下:

<!-- 數據庫事務管理 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

修復方案一:

直接註釋掉org.springframework.jdbc.datasource.DataSourceTransactionManager bean的定義即可

	<!-- 數據庫事務管理 -->
<!--	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">-->
<!--        <property name="dataSource" ref="dataSource"/>-->
<!--    </bean>-->

修復方案二:

當然你也可以註釋掉上面那個bean 然後自己添加這個JPA 的事務管理器org.springframework.orm.jpa.JpaTransactionManager

    <!-- 配置Spring Data JPA 事務管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

PS: 但是由於Spring Data JPA 有自動配置功能,因此不設置也可以。


修復之後你會看到save 方法已經奏效可以正常插入數據庫了。

本篇完~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章