spring AOP的事务顺序问题

在项目中有一个事务逻辑需要被很多业务触发后调用,使用了springAOP,在执行过程中发现事务不是按照执行顺序执行的
比如业务1是最终执行的sql为update A
业务采用aop方式在业务1执行后再执行,执行sql为update B

实际情况确实先update B ,然后才update A

0

2个回答

1、你是用的hibernate吗? 如果是 你应该知道sql重排序问题
[quote]10.10. Session刷出(flush)
每间隔一段时间,Session会执行一些必需的SQL语句来把内存中的对象的状态同步到JDBC连接中。这个过程被称为刷出(flush),默认会在下面的时间点执行:

在某些查询执行之前

在调用org.hibernate.Transaction.commit()的时候

在调用Session.flush()的时候

涉及的SQL语句会按照下面的顺序发出执行:

所有对实体进行插入的语句,其顺序按照对象执行Session.save()的时间顺序

所有对实体进行更新的语句

所有进行集合删除的语句

所有对集合元素进行删除,更新或者插入的语句

所有进行集合插入的语句

所有对实体进行删除的语句,其顺序按照对象执行Session.delete()的时间顺序

(有一个例外是,如果对象使用native方式来生成ID(持久化标识)的话,它们一执行save就会被插入。)

除非你明确地发出了flush()指令,关于Session何时会执行这些JDBC调用是完全无法保证的,只能保证它们执行的前后顺序。 当然,Hibernate保证,Query.list(..)绝对不会返回已经失效的数据,也不会返回错误数据。
[/quote]

[color=red]
除非你明确地发出了flush()指令,关于Session何时会执行这些JDBC调用是完全无法保证的,只能保证它们执行的前后顺序。 [/color]

0
hpuxxk
hpuxxk 谢谢开涛的提醒,问题已经解决,原因居然是AOP调用的接口没有采用session管理。小公司,新气象。
6 年多之前 回复

[flash=200,200][img][img][list]
[*][code="java"][quote][u][u][b][i][table]
[*]|[flash=200,200][url][img][code="java"][quote]123[b][/b] 8) 8) 8) [/quote][/code][/img][/url][/flash]|
[*][/table][/i][/b][/u][/u][/quote][/code]
[/list][/img][/img][/flash]

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!