@Transactional(readOnly = true)意思
代表只读,在将事务设置成只读后,相当于将数据库设置成只读数据库,此时若要进行写的操作,会出现错误。
- 只读事务内,不能进行增、删、改操作,否则出现异常:cannot execute statement in a read-only transaction;
- 只读事务内,同一个查询方法的多次调用查询结果一致,不会读取到其他事务修改的数据;
- 加只读事务,ORM框架会对其进行查询优化;
几种设置只读事务的方法:
(1)在JDBC中,指定只读事务的办法为: connection.setReadOnly(true);
(2)在Hibernate中,指定只读事务的办法为: session.setFlushMode(FlushMode.NEVER);
此时,Hibernate也会为只读事务提供Session方面的一些优化手段
(3)在Spring的Hibernate封装中,指定只读事务的办法为: bean配置文件中,prop属性增加“read-Only”
或者用注解方式@Transactional(readOnly=true)
参考 博客1(https://www.zhihu.com/question/39074428) 博客2:https://www.pianshen.com/article/2061695048/