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 方法已经奏效可以正常插入数据库了。

本篇完~

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