You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring事务中先写后读的行为表现是什么?

问题

假设存在一个标注了@Transactional注解的方法,该方法首先修改一个对象,随后读取该对象。请问读取到的对象是旧的未修改版本还是修改后的版本?这种情况是否属于脏读?

示例代码如下:

@Transactional
public Item writeThenRead(Item something) {
    myDao.writeSomething(something);
    Item fetched = myDao.readThatThing(something.getId());

    return fetched;
}
回答
  • 读取到的是修改后的版本
    带有@Transactional注解的方法会开启一个数据库事务,同一个事务内的所有数据库操作都共享同一个数据库会话。数据库的事务隔离机制会保证当前事务内的修改对自身可见——简单说就是,你在事务里刚执行完更新操作,后续的查询会直接拿到这个还没提交的修改结果,不会是旧数据。

  • 这种情况不属于脏读
    脏读的定义是一个事务读取到了另一个未提交事务的修改数据。而这里的读写操作都在同一个事务内部,完全是自身事务的操作,和脏读的场景不沾边。只有跨事务读取到其他未提交事务的修改时,才会构成脏读。

内容的提问来源于stack exchange,提问作者KJ0797

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 05:57:35