spring boot jpa 同一事务内数据不一致问题

shuaigeland 2018-04-18 01:44:34
最近在spring boot内使用hibernate jpa时遇到一个问题,容器使用的是内置tomcat,使用 @transactional 注解写到了 service方法上。

使用tomcat容器启动时调用repository的update方法再在同一方法内部读取后并不是update后的数据,而是之前的数据。

但是使用单元测试时同样的代码读取正常。

将@transactional注解放到repository的update方法上也是和上边同样的现象

有没有大神遇到过类似现象,是哪里配置出了问题吗

spring.datasource.url=
spring.datasource.username=
spring.datasource.password=

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.tomcat.max-active=200
spring.datasource.tomcat.max-idle=200
spring.datasource.tomcat.initialSize=20
spring.datasource.tomcat.default-auto-commit=true
...全文
1494 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
荡漾- 2019-01-09
  • 打赏
  • 举报
回复
设置即时加载就解决了
guanalbert 2019-01-09
  • 打赏
  • 举报
回复
楼主找到原因了吗?
我遇到同样的问题,同一个方法内部,先删再查询,查询出来的结果包含了删除了的。但是数据库里面已经删除成功了。
shuaigeland 2018-04-18
  • 打赏
  • 举报
回复
引用 1 楼 qq_39323778 的回复:
事务处理没有走完,这时的update只是在缓存中,还没有存到数据库里
可是我理解,同一个事务内部,修改应该是可见的,把注解加到service方法上,那么虽然此时没有修改进数据库,同一个事务内部修改应该可以被后续的读到, 如果把事务加到数据库访问的update方法上,那么执行了之后事务完结,被写到数据库里(事实上我打断点观察确实也写进去了),然后再调用读方法应该可以读到,这个是不同的事务
shuaigeland 2018-04-18
  • 打赏
  • 举报
回复
可是我理解,同一个事务内部,修改应该是可见的,把注解加到service方法上,那么虽然此时没有修改进数据库,同一个事务内部修改应该可以被后续的读到, 如果把事务加到数据库访问的update方法上,那么执行了之后事务完结,被写到数据库里(事实上我打断点观察确实也写进去了),然后再调用读方法应该可以读到,这个是不同的事务
qq_39323778 2018-04-18
  • 打赏
  • 举报
回复
事务处理没有走完,这时的update只是在缓存中,还没有存到数据库里

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧