对A表新增一条数据。接着联合查询A表和B表。没查询要最新的数据 。大神进来看看!

时间:2021-11-25 14:48:53
使用mybatis对A表新增了一条数据,然后联合查询A表和B表,这时候查询出来的数据不包含刚刚新增的数据。必须重启服务才能查询到最新的数据。我再想是不是事务没提交还是缓存问题?大神给看看,对了我使用的是springMVC+mybatis

4 个解决方案

#1


看看是不是事务隔离级别的问题,需要修改到读未提交才能读取未提交的数据

#2


引用 1 楼 Inhibitory 的回复:
看看是不是事务隔离级别的问题,需要修改到读未提交才能读取未提交的数据

以前遇到一样的问题。那时候是spring配置了以某某名称开头的方法进行事务管理,那时候我写方法没按这个规则出现这个相同的问题,但是现在我的方法名完全按照配置来的。还出现这个问题。所以找了一下午,无解了!!!!

#3


新增的方法改了好几种写法。问题还是一样存在。查询也修改了。还是这样    到底是事务还是缓存问题。  基础太差,被这问题整的。。。。

#4


<!-- 事务管理 通知 -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 对insert,update,delete 开头的方法进行事务管理,只要有异常就回滚 -->
<tx:method name="add*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="append*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="insert*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="save*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="update*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="modify*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="edit*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="delete*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="remove*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="repair" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="delAndRepair" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<!-- select,count开头的方法,开启只读,提高数据库访问性能 -->
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="load*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="search*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="datagrid*" propagation="SUPPORTS" read-only="true"/>
<!-- 对其他方法 使用默认的事务管理 -->
<tx:method name="*" propagation="SUPPORTS" />
</tx:attributes>
</tx:advice>


这是事务管理的配置。我的新增方法以addXXX开头,查询方法是以getxxx开头 。  大家给看看有啥问题没有!

#1


看看是不是事务隔离级别的问题,需要修改到读未提交才能读取未提交的数据

#2


引用 1 楼 Inhibitory 的回复:
看看是不是事务隔离级别的问题,需要修改到读未提交才能读取未提交的数据

以前遇到一样的问题。那时候是spring配置了以某某名称开头的方法进行事务管理,那时候我写方法没按这个规则出现这个相同的问题,但是现在我的方法名完全按照配置来的。还出现这个问题。所以找了一下午,无解了!!!!

#3


新增的方法改了好几种写法。问题还是一样存在。查询也修改了。还是这样    到底是事务还是缓存问题。  基础太差,被这问题整的。。。。

#4


<!-- 事务管理 通知 -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 对insert,update,delete 开头的方法进行事务管理,只要有异常就回滚 -->
<tx:method name="add*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="append*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="insert*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="save*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="update*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="modify*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="edit*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="delete*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="remove*" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="repair" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<tx:method name="delAndRepair" propagation="REQUIRED"  rollback-for="java.lang.Throwable"/>
<!-- select,count开头的方法,开启只读,提高数据库访问性能 -->
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="load*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="search*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="datagrid*" propagation="SUPPORTS" read-only="true"/>
<!-- 对其他方法 使用默认的事务管理 -->
<tx:method name="*" propagation="SUPPORTS" />
</tx:attributes>
</tx:advice>


这是事务管理的配置。我的新增方法以addXXX开头,查询方法是以getxxx开头 。  大家给看看有啥问题没有!