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

是否应为简单查询方法添加@Transactional(readOnly = true)注解?

JPA只读事务的使用思考

事务的核心优势可总结为ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。在save、update这类写操作方法中,事务的作用十分关键,因为它支持脏检查(dirty checking)等多种核心特性。

此外,当将事务标记为readonly = true时,JPA会识别出该事务内的实体仅用于只读用途,不会为变更检测维护单独的快照,以此节省内存开销并提升性能。示例代码如下:

@Transactional(readOnly = true)
public Optional<Adate> getAdateByCalendarId(String calendarId) {
    return adateRepository.findAdateByCalendarId(calendarId);
}

不过我认为,对于CRUD中的读取操作(即R,排除创建Create、更新Update、删除Delete这三类写操作),其实没必要使用@Transactional(readonly=true)。原因如下:

  • 为简单查询添加@Transactional(readonly=true)属于过度设计。
  • 查询获取的实体会被存入一级缓存,但这类场景下完全没有必要将它们缓存起来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:53:11