关于Spring.net+NHibernate的事务控制
这两天帮朋友看了个hibernate事务问题,发现他们的系统中存在这类问题:
为每个Entity建立了一个manager,事务由spring.net管理。出现manager1出错后,manager2无法回滚。我问他们这种处理方法从哪来?朋友说博客园……
我上去看了看,确实如此。唉,我只能告诉他,他对manager的作用理解错误。
一个manager对应一个entity,哪么manager还有什么意义?
不知道别人怎么看,在这种系统中,一个manager应该是一个实际业务对业务所包含的Entity的操作(也就是说manager的一个add方法,可能同时更新多张表),这样才能确保事务在出错后正常回滚。
并且,一个系统如果有非常多的表,这么多的manager如何维护?
正好我这里做过类似的东西,上部分配置及代码。
注:只要名称是Service结尾即可。
<property name="SessionFactory" ref="NHibernateSessionFactory" />
<property name="TemplateFlushMode" value="Auto" />
<property name="CacheQueries" value="true" />
</object>
<object id="transactionManager" type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate31">
<property name="DbProvider" ref="DbProvider" />
<property name="SessionFactory" ref="NHibernateSessionFactory"/>
</object>
<object type="Spring.Aop.Framework.AutoProxy.ObjectNameAutoProxyCreator,Spring.Aop">
<property name="ObjectNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptorName</value>
</list>
</property>
</object>
<!--拦截器,定义事务策略-->
<object id="transactionInterceptorName" type="Spring.Transaction.Interceptor.TransactionInterceptor,Spring.Data">
<property name="transactionAttributes">
<name-values>
<add key="*" value="PROPAGATION_REQUIRED"/><!--事务策略定义-->
</name-values>
</property>
<property name="transactionManager">
<ref local="transactionManager" />
</property>
</object>
具体的Service
Service接口
{
IHibernateOperations HibernateTemplate { get; set; }
void AddTxImplement();
}
Service实现
{
public IHibernateOperations HibernateTemplate { get; set; }
public void AddTxImplement()
{
Entity.Model.RT03 rt03 = new Entity.Model.RT03();
rt03.RT03PK.RTB001 = "0001";
rt03.RT03PK.RTC001 = "0001";
rt03.RTC002="0002";
rt03.RTC003 = "003";
rt03.RTC004 = "004";
RTP.Entity.Model.RT01 rt01 = new Entity.Model.RT01();
rt01.RTA001 = "0001";
rt01.RTA002 = "0002";
this.HibernateTemplate.Save(rt01);
this.HibernateTemplate.Save(rt03);
}
}
Service配置
<object id="TxService" type="RTP.Services.Core.bo.TxServiceImpl" >
<property name="HibernateTemplate" ref="HibernateTemplate" />
</object>
</objects>
经测试,以上方法在asp.net mvc3/spring.net 1.3.2/NHibernate 3.1/oracle 10g/windows2008下事务可正常回滚。
目前,朋友正在痛苦的重构着
转载于:https://www.cnblogs.com/h500ml/archive/2011/08/03/2126284.html
关于Spring.net+NHibernate的事务控制相关推荐
- 【spring】编程式事务控制
结构: AccountServiceImpl package com.itheima.service.impl;import com.itheima.dao.IAccountDao; import c ...
- Spring的三种事务控制
Spring的三种方式的事务控制 1:基于编程式的事务控制 1.1:编程式事务控制相关对象 PlatformTransactionManager接口是spring的事务管理器,他里面提供了我们常用的操 ...
- spring boot集成mybatis+事务控制
一下代码为DEMO演示,采用注解的方式完成Spring boot和Mybatis的集成,并进行事物的控制 数据源的配置: 1 spring.datasource.url=jdbc:mysql://lo ...
- 代理对象之spring注解事务控制或shiro注解权限控制的理解
通过注解 代理的可以是service或者action等,当他们被调用时由代理对象生效,由框架控制 shiro Action方法注解权限控制 底层基于代理技术实现,为Action创建代理对象,由代理对象 ...
- Spring.NET实用技巧3——NHibernate分布式事务(上)
在使用NHibernate作为持久层框架时,多数据库操作是一个比较难解决的问题.并且很多网友在给我发的eamil中经常谈到此问题.由于NHibernate是一种框架,不能像ADO.NET那样直接用SQ ...
- 【Spring】spring基于注解的声明式事务控制
结构 domin package com.itheima.domain;import java.io.Serializable;public class Account implements Seri ...
- 【spring】spring基于xml的声明式事务控制
结构 domain package com.itheima.domain;import java.io.Serializable;public class Account implements Ser ...
- 【Spring】事务控制API
Spring事务控制需要明确 1. JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计==业务层==的事务处理解决方案. 2. Spring框架提供了一组事务控制的接口.在S ...
- Spring AOP+事务控制
为什么80%的码农都做不了架构师?>>> AOP事务控制 applicationContext.xml配置文件 <!-- 开启AOP监听 只对当前配置文件有效 --& ...
- spring.net nhibernate 分布布式事务(下)
spring.net nhibernate 分布布式事务(下) 摘自: http://www.cnblogs.com/GoodHelper/archive/2010/07/30/SpringNetDi ...
最新文章
- 如何使用CocoStudio场景编辑器制作魔卡幻想
- aspen和python一起使用_python-将$cond语句与$project一起使用并在PyMon...
- Asp.net HttpClient Proxy(Fiddler)
- Matlab 2022a 安装教程(手把手式教程 超简单)
- 查询除了一列意外_想让你的查询语句变快吗?
- 按揭买的房,房产证为什么要放在银行,自己要用房产证怎么办?
- ajax error的用法,JQuery ajaxError()用法及代码示例
- 睡眠多少分钟一个循环_关于科学睡眠丨90分钟一个睡眠周期,每晚循环3到5次...
- activity 点击后传递数据给fragment_ViewModel+LiveData实现Fragment间通信
- cad计算机制图论文,机械制图论文范文
- Linux实战教学笔记24:SSH连接原理及ssh-key
- redis系列二: linux下安装redis
- order by 影响效率么_如此简单的设计就能将太阳能电池的效率提升25%
- CF633C:Spy Syndrome 2——题解
- U-Net模型搭建python实现
- 今天那个服务器有无限火力,无限火力即将登陆,测试服已出,这次的无限火力有什么不一样?...
- 8000字解读安踏理想汽车丨打破用户体验黑箱的实战策略
- JVM参数太多?一网打尽常用JVM参数!
- 掌握电商后台设计,这一篇足矣
- 【反编译系列】四、反编译so文件(IDA_Pro)
热门文章
- web性能优化--缓存
- [USACO12NOV]同时平衡线Concurrently Balanced Strings DP map 思维
- 通过JMETER后置处理器JSON Path Extractor插件来获取响应结果
- 网络对抗——web基础
- 【Android】Scrollview返回顶部,快速返回顶部的功能实现,详解代码。
- c# winform 全角自动转化半角问题(C#中ImeMode的值):转载
- 1020. Tree Traversals
- 求一天的起始和结束(时间戳)和一个月的第一天和最后一天
- 敏捷测试与普通测试的区别
- 对于根目录磁盘满的了问题