read_only="true"有什么作用

read_only="true"有什么作用

请问以下read_only="true"有什么作用?

<tx:advice id="txAdvice" transaction-manager="transactionManager" >
   <tx:attributes>
       <tx:method name="get*" read-only="true"/>
       <tx:method name="find*" read-only="true"/>
       <tx:method name="search*" read-only="true"/>
       <tx:method name="*" propagation="REQUIRED"/>
   </tx:attributes>
</tx:advice>

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕酷酷 2020-02-05 10:28:27

同学你好,

1、首先说read_only="true"表示不以事务的方法进行提交 ,也就是只读查询,可以指定事务类型为readonly,即只读事务,不进行提交事务,只有增删改才需要提交事务,修改数据库的数据。对于同学所描述的取值为REQUIRED,字体颜色呈灰色,这个字体颜色不能说明它是按照事务进行提交,对于propagation标签的本身默认值就为REQUIRED,默认值本身就会灰色显示。

2、get*方法是只读查询,也就是只读事务,不涉及脏读的问题,因为脏读表示一个事务读取到了另外一个事务没有提交的数据,而读取事务是不需要提交数据,修改数据库中的数据的,只有增删改才需要提交事务。所以也就是只有当一个事务进行增删改时,没有提交事务,另一个事务进行查询时,才会出现脏读问题。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 提问者 慕沐8221787 #1
    一、只读事务又是什么概念,难道不是事务吗?二、get*方法没有可能读到其他事务执行的中间数据吗?依靠什么机制避免该情况发生?
    2020-02-05 11:34:42
  • 好帮手慕酷酷 回复 提问者 慕沐8221787 #2
    同学你好,1、只读事务也是事务,表示事务就仅仅是只读状态,不能自动提交事务。“只读事务”就是提示数据库驱动程序和数据库系统,这个事务并不包含更改数据的操作。2、不会看到的,这个只读事务,规定只能看到其他事务提交过的数据。这个是mysql在底层进行的实现。同学不需要过度深究底层。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2020-02-05 12:05:04
好帮手慕酷酷 2020-02-04 18:10:54

同学你好,这里read_only="true"表示不以事务的方法进行提交,因为一般情况下get、find、search为前缀的方法名,都是查询方法,查询方法不需要以事务进行提交,这样编写也是为了提高代码的执行效率。

 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 提问者 慕沐8221787 #1
    这种说法有两点疑问,我在 <tx:method name="get*" read-only="true"/>中添加propagation标签,如果取值为REQUIRED,字体颜色呈灰色,如果取值其他(如NESTED),字体颜色是绿色,这说明其默认值为REQUIRED,既然propagation标签的默认值为REQUIRED,则表示 <tx:method name="get*" read-only="true"/>是按照事务提交的,对吗?老师可以验证一下,这是其一,其二,get*方法如果不按事务提交,不就出现脏读等问题吗?
    2020-02-04 23:01:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
SSM主流框架入门与综合项目实战2018版
  • 参与学习           人
  • 提交作业       205    份
  • 解答问题       4317    个

Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师