【事务】<查询不到同一调用方法其它事务提交的更新>解决方案
2016-09-06 11:39
429 查看
最近遇到一个很棘手的问题,至今也解释不清楚原因,不过已经找到了解决方案。
先来看看Propagation属性的值含义,@Transactional中Propagation属性有7个选项可供选择:
Propagation.MANDATORY。当前方法必须在已经定义的Transaction中运行,如果没有已定义的Transaction则抛出异常。
Propagation.NEST。如果没有已定义的Transaction,当前方法新开一个Transaction并在该Transaction中运行。如果存在已定义的Transaction,当前方法在嵌套事务(Nested Transaction)中运行 — 嵌套事务中可以定义储存点,因此可以独立于外部的Transaction而进行rollback。
Propagation.NEVER 。当前方法不应在Transaction中运行,如果存在已经定义的Transaction则抛出异常。
Propagation.NOT_SUPPORTED。当前方法不应在Transaction中运行,如果存在已经定义的Transaction,则该Transaction暂停(挂起)直至该方法运行完毕。
Propagation.REQUIRED。 默认值。当前方法必须在Transaction中运行。如果存在已经定义的Transaction,则该方法在已定义的Transaction中运行;如果不存在已经定义的Transaction,则该方法新开一个Transaction并在其中运行。
Propagation.REQUIRES_NEW。当前方法必须在新开的Transaction中运行。如果存在已经定义的Transaction,则该已定义的Transaction暂停直至新开的Transaction执行完毕。
Propagation.SUPPORTS。当前方法不需要在Transaction中运行,但如果存在已经定义的Transaction,则该方法也可以在Transaction中正常执行。
遇到的问题是这样的:
解决方式:
现在只是用这种方式解决了,但是想不明白为什么要这么做,如果有哪位大神能解释清楚原因请告知一下,非常感谢!!!
先来看看Propagation属性的值含义,@Transactional中Propagation属性有7个选项可供选择:
Propagation.MANDATORY。当前方法必须在已经定义的Transaction中运行,如果没有已定义的Transaction则抛出异常。
Propagation.NEST。如果没有已定义的Transaction,当前方法新开一个Transaction并在该Transaction中运行。如果存在已定义的Transaction,当前方法在嵌套事务(Nested Transaction)中运行 — 嵌套事务中可以定义储存点,因此可以独立于外部的Transaction而进行rollback。
Propagation.NEVER 。当前方法不应在Transaction中运行,如果存在已经定义的Transaction则抛出异常。
Propagation.NOT_SUPPORTED。当前方法不应在Transaction中运行,如果存在已经定义的Transaction,则该Transaction暂停(挂起)直至该方法运行完毕。
Propagation.REQUIRED。 默认值。当前方法必须在Transaction中运行。如果存在已经定义的Transaction,则该方法在已定义的Transaction中运行;如果不存在已经定义的Transaction,则该方法新开一个Transaction并在其中运行。
Propagation.REQUIRES_NEW。当前方法必须在新开的Transaction中运行。如果存在已经定义的Transaction,则该已定义的Transaction暂停直至新开的Transaction执行完毕。
Propagation.SUPPORTS。当前方法不需要在Transaction中运行,但如果存在已经定义的Transaction,则该方法也可以在Transaction中正常执行。
遇到的问题是这样的:
// surports 查询不到同一调用方法其它事务提交的更新。 原因未知 a() {//surports b.b();//requstd or request_new b.c(); //surports --查询不到b方法中更新的数据 }
解决方式:
避免这种情况的方法, a()方法不被aop代理
现在只是用这种方式解决了,但是想不明白为什么要这么做,如果有哪位大神能解释清楚原因请告知一下,非常感谢!!!
相关文章推荐
- 【事务】<查询不到同一调用方法其它事务提交的更新>解决方案
- 【事务】<查询不到同一调用方法其它事务提交的更新>解决方案
- 【事务】<查询不到同一调用方法其它事务提交的更新>解决方案
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 解决事务未完成提交,其它db连接查询不到的问题
- aspx页面中<input>中特殊字符导致提交不安全信息问题的解决方案
- 解决 ”不允许在查询中显式构造实体类型“问题及使用其他方法实现返回 List<Model对象>或者IQueryable<Model对象>对象
- <转载学习>子类对父类构造方法调用小结
- JNI方法调用C++类库<一>
- 页面上2个按钮,当提交表单的时候调用不同的方法,但是都需要把页面上面的查询条件提交给action
- SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除
- 使用Enumerable.OfType<T>扩展方法实现非泛型集合的Linq查询
- c++调用java时得到java签名的方法javap -s -p <classname>
- <%#%>如何调用后台的方法。
- <转>Win7资源管理器更新后不断重启解决方案
- <a>标签中调用js的几种方法
- <为知更新>windows下使用android隐藏api的方法
- Spring事务拦截不到内部方法的互相调用
- Java中使用hql,sql查询返回的list<Object> 转成需要的实体对象--方法讲解!
- List<T>方法调用线程同步问题