问题描述
在项目中有一个事务逻辑需要被很多业务触发后调用,使用了springAOP,在执行过程中发现事务不是按照执行顺序执行的比如业务1是最终执行的sql为update A业务采用aop方式在业务1执行后再执行,执行sql为update B实际情况确实先update B ,然后才update A
解决方案
1、你是用的hibernate吗? 如果是 你应该知道sql重排序问题引用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(..)绝对不会返回已经失效的数据,也不会返回错误数据。 除非你明确地发出了flush()指令,关于Session何时会执行这些JDBC调用是完全无法保证的,只能保证它们执行的前后顺序。
解决方案二:
[flash=200,200][img][img][list][*]引用[u][u][b][i][*][flash=200,200][url][img]引用123[b][/b] 8) 8) 8) [/img][/url][/flash][/i][/b][/u][/u][/list][/img][/img][/flash]