我是一名 Spring 开发人员,我通常使用
@Transactional(readOnly = true)
进行读取操作。我相信这是对Hibernate的提示,但我不知道Hibernate如何将此提示发送到Mysql等数据库。
Mysql 有只读事务,如 https://dev.mysql.com/doc/refman/8.0/en/innodb-performance-ro-txn.html
对于性能:Hibernate 使用此提示来实现休眠级别的性能(脏检查)。
问题:Hibernate 是否将此提示发送到 MySQL?
@Transactional(readOnly = true)
是否意味着 Mysql 上的只读事务?
快速响应:Hibernate 是否将此提示发送到 MySQL?不,
说明:
@transactional(readOnly=true) 意味着spring将阻止你修改数据库(写入,更新,删除..)。 该控制是在 Spring 项目级别实现的(而不是在数据库级别)。
@Transactional 是如何工作的:
@Transactional 利用面向方面编程(AOP)来代理带注释的类或方法。 TransactionInterceptor.class 和 TransactionAspectSupport.class 等方面拦截方法调用并应用指定的控制(例如 readOnly)。
我推荐我在 LinkedIn 上发表的关于事务管理的这篇文章: https://www.linkedin.com/posts/youness-tizi-30517a133_spring-springabrjdbc-transactions-activity-7167899616141651969-ZP-g?utm_source=share&utm_medium=member_desktop