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

数据库只读事务与Hibernate @Transactional(readOnly=true)的关联疑问

关于@Transactional(readOnly = true)与MySQL只读事务的关系

Hibernate会把只读提示传递给MySQL吗?

会的。当你在Spring中使用@Transactional(readOnly = true)时,Hibernate不仅会在自身层面做优化(比如跳过实体的脏检查、避免刷新一级缓存),还会通过JDBC驱动把只读标记传递给MySQL。具体来说,Hibernate会调用JDBC Connection的setReadOnly(true)方法,MySQL的InnoDB引擎识别到这个设置后,会开启只读事务,启用对应的性能优化——比如不需要生成undo日志、优化锁策略等。

@Transactional(readOnly = true)等同于MySQL中的只读事务吗?

不完全等同,但核心效果一致。

  • MySQL的只读事务是纯粹的数据库层面设置,只在数据库引擎层面提供性能优化;
  • 而Spring的@Transactional(readOnly = true)除了触发MySQL的只读事务外,还会在Hibernate(ORM)层面做额外的优化:比如跳过脏检查步骤、禁止会话的自动刷新、避免执行flush操作等,这些ORM层面的优化能进一步提升只读操作的效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:53:10