这两天帮朋友看了个hibernate事务问题,发现他们的系统中存在这类问题:

为每个Entity建立了一个manager,事务由spring.net管理。出现manager1出错后,manager2无法回滚。我问他们这种处理方法从哪来?朋友说博客园……

我上去看了看,确实如此。唉,我只能告诉他,他对manager的作用理解错误。

一个manager对应一个entity,哪么manager还有什么意义?

不知道别人怎么看,在这种系统中,一个manager应该是一个实际业务对业务所包含的Entity的操作(也就是说manager的一个add方法,可能同时更新多张表),这样才能确保事务在出错后正常回滚。

并且,一个系统如果有非常多的表,这么多的manager如何维护?

正好我这里做过类似的东西,上部分配置及代码。

注:只要名称是Service结尾即可。

View Code

  <object id="HibernateTemplate" type="Spring.Data.NHibernate.Generic.HibernateTemplate">
    <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接口

    public interface TxImplementService
    {
        IHibernateOperations HibernateTemplate { get; set; }
         void AddTxImplement();
    }

Service实现

    public class TxServiceImpl : TxImplementService
    {

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配置

<objects xmlns="http://www.springframework.net" >
  <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的事务控制相关推荐

  1. 【spring】编程式事务控制

    结构: AccountServiceImpl package com.itheima.service.impl;import com.itheima.dao.IAccountDao; import c ...

  2. Spring的三种事务控制

    Spring的三种方式的事务控制 1:基于编程式的事务控制 1.1:编程式事务控制相关对象 PlatformTransactionManager接口是spring的事务管理器,他里面提供了我们常用的操 ...

  3. spring boot集成mybatis+事务控制

    一下代码为DEMO演示,采用注解的方式完成Spring boot和Mybatis的集成,并进行事物的控制 数据源的配置: 1 spring.datasource.url=jdbc:mysql://lo ...

  4. 代理对象之spring注解事务控制或shiro注解权限控制的理解

    通过注解 代理的可以是service或者action等,当他们被调用时由代理对象生效,由框架控制 shiro Action方法注解权限控制 底层基于代理技术实现,为Action创建代理对象,由代理对象 ...

  5. Spring.NET实用技巧3——NHibernate分布式事务(上)

    在使用NHibernate作为持久层框架时,多数据库操作是一个比较难解决的问题.并且很多网友在给我发的eamil中经常谈到此问题.由于NHibernate是一种框架,不能像ADO.NET那样直接用SQ ...

  6. 【Spring】spring基于注解的声明式事务控制

    结构 domin package com.itheima.domain;import java.io.Serializable;public class Account implements Seri ...

  7. 【spring】spring基于xml的声明式事务控制

    结构 domain package com.itheima.domain;import java.io.Serializable;public class Account implements Ser ...

  8. 【Spring】事务控制API

    Spring事务控制需要明确 1. JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计==业务层==的事务处理解决方案. 2. Spring框架提供了一组事务控制的接口.在S ...

  9. Spring AOP+事务控制

    为什么80%的码农都做不了架构师?>>>    AOP事务控制   applicationContext.xml配置文件 <!-- 开启AOP监听 只对当前配置文件有效 --& ...

  10. spring.net nhibernate 分布布式事务(下)

    spring.net nhibernate 分布布式事务(下) 摘自: http://www.cnblogs.com/GoodHelper/archive/2010/07/30/SpringNetDi ...

最新文章

  1. 如何使用CocoStudio场景编辑器制作魔卡幻想
  2. aspen和python一起使用_python-将$cond语句与$project一起使用并在PyMon...
  3. Asp.net HttpClient Proxy(Fiddler)
  4. Matlab 2022a 安装教程(手把手式教程 超简单)
  5. 查询除了一列意外_想让你的查询语句变快吗?
  6. 按揭买的房,房产证为什么要放在银行,自己要用房产证怎么办?
  7. ajax error的用法,JQuery ajaxError()用法及代码示例
  8. 睡眠多少分钟一个循环_关于科学睡眠丨90分钟一个睡眠周期,每晚循环3到5次...
  9. activity 点击后传递数据给fragment_ViewModel+LiveData实现Fragment间通信
  10. cad计算机制图论文,机械制图论文范文
  11. Linux实战教学笔记24:SSH连接原理及ssh-key
  12. redis系列二: linux下安装redis
  13. order by 影响效率么_如此简单的设计就能将太阳能电池的效率提升25%
  14. CF633C:Spy Syndrome 2——题解
  15. U-Net模型搭建python实现
  16. 今天那个服务器有无限火力,无限火力即将登陆,测试服已出,这次的无限火力有什么不一样?...
  17. 8000字解读安踏理想汽车丨打破用户体验黑箱的实战策略
  18. JVM参数太多?一网打尽常用JVM参数!
  19. 掌握电商后台设计,这一篇足矣
  20. 【反编译系列】四、反编译so文件(IDA_Pro)

热门文章

  1. web性能优化--缓存
  2. [USACO12NOV]同时平衡线Concurrently Balanced Strings DP map 思维
  3. 通过JMETER后置处理器JSON Path Extractor插件来获取响应结果
  4. 网络对抗——web基础
  5. 【Android】Scrollview返回顶部,快速返回顶部的功能实现,详解代码。
  6. c# winform 全角自动转化半角问题(C#中ImeMode的值):转载
  7. 1020. Tree Traversals
  8. 求一天的起始和结束(时间戳)和一个月的第一天和最后一天
  9. 敏捷测试与普通测试的区别
  10. 对于根目录磁盘满的了问题