说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

问个关于关个spring事务的简单问题

编辑:说三道四文库 发布时间:2017-03-25 10:21
HTML文档下载 WORD文档下载 PDF文档下载

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<!--txProxyTemplate--> 
   <bean id="txProxyTemplate" abstract="true"   class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
            <ref bean="transactionManager"/>
        </property>
        
        <property name="transactionAttributes">
            <props>
                <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="del*">PROPAGATION_REQUIRED</prop>
                <prop key="change*">PROPAGATION_REQUIRED</prop> 
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property> 
 </bean>
<bean id="menuDAO" class="kohisa.cn.dao.impl.MenuDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="menuService" class="kohisa.cn.service.impl.MenuService">
<property name="menuDAO">
<ref bean="menuDAO"/>
</property>
</bean>
      <bean id="menuServiceProxy" parent="txProxyTemplate" >
        <property name="target">
            <ref bean="menuService"/>
        </property>
    </bean>
<bean id="menuAction" class="kohisa.cn.action.MenuAction">
<property name="menuServiceProxy">
<ref bean="menuServiceProxy"/>
</property>
</bean>

这么配置对劲不,这个事务是什么玩应啊,是不是就是用不自己去commit?
getHibernateTemplate和SPRING的事务有关系没啊?
配置声明式事务,在代码里就不用管事务了(代码简洁了点)
getHibernateTemplate跟spring事务没关系,只不过HibernateTemplate又对session做了封装
不再用手动关闭session,也不再用从SessionFactory中拿session
还有:比如你在以一个UserManager里面需要保存一个user,可能你之前的做法是先得到session,然后session.save(user);
又有一个需求,在保存user的时候顺便记录下user的操作,在UserManager代码里面可能还要假如下面:
LogManager logManager = new LogManager();
Log log = new Log();
log.setType("DELETE");
log.setUser(user);
log.setDate(new Date());
logManager.save(log);
然而LogManager里的save方法也是需要session的,我们要求是user与log要同时保存成功或失败
但你根本没办法保证UserManager与LogManager里的session是同一个session(当然用SessionFactory的getCurrentSession()方法也是可以的),所以可能就出错了
用getHibernateTemplate就能保证session不会丢失,其实本质还是session.save(),可以看源代码去
说明一下:要是用SessionFactory的getCurrentSession()的话还要在hibernate.cfg.xml加上

<!--本地事务-->
<property name="hibernate.current_session_context_class">thread</property>
<!--JTA用下面这个,我不懂这个--->
<property name="hibernate.current_session_context_class">jta</property>

总之:我觉得getHibernateTemplate()经常是跟spring的声明式事务一起使用让人觉得它跟事务有关,其实就是为了让我们的一些操作简单化而已,
也就是simplifies Hibernate data access
我认识只能到这里了,希望有高人继续,呵呵
首先多謝樓上,講地很明白。
我剛才又去試了試,重新試了下,但是這個事務不回滾啊,要不就是我的測試方法有問題。
applicationContext.xml

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

  <bean id="transactionInterceptor"
        class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributes">
            <props>
                <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>
    <bean
        class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <list>
                <value>userService</value>
            </list>
          </property>
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
            </list>
        </property>
    </bean>

<bean id="userDAO" class="kohisa.cn.dao.impl.UserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<bean id="userService" class="kohisa.cn.service.impl.UserService" >
<property name="userDAO">
<ref bean="userDAO"/>
</property>
</bean>
<bean id="myDwr" class="kohisa.cn.dwr.MyDwr">
<property name="userService">
<ref bean="userService"/>
</property>
</bean>






UserService類
public class UserService implements IUserService {
public UserService(){}
private IUserDAO userDAO;
public IUserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(IUserDAO userDAO) {
this.userDAO = userDAO;
}
public void save(Users users){
userDAO.save(users);
userDAO.save(null);我讓這地方傳個空出錯,然後上邊那條記錄好回滾。。不知道這樣對不。
}
}
UserDAO類
public class UserDAO extends HibernateDaoSupport implements IUserDAO {
public UserDAO(){}
public void save(Users user){
getHibernateTemplate().save(user);
}
}
main方法
public static void main(String args[]) throws UnsupportedEncodingException{
IUserService userService = (IUserService)ApplicationContextUtil.getApplicationContext().getBean("userService");
                Users users = new Users();
                users.setName("abc");
userService.save(users);
}

總是有一條記錄插了進去,不回滾啊。
不知道我上面的配置是不是有問題,還是測試方法有問題,請達人指點啊能測試回滾的方法。。
我靠,原來不回滾是我表的問題,改成innodb就好了..
会不会是别的save方法也启用事务了呢?我也学spring不久,不是很能看明白你的配置文件,因为现在应该用<aop:config>这种方式了
给你改了一下(搞不好spring2以后才可以用,如果你的版本太低就别往下看了)

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

<!-- 配置sessionFactory -->
<bean name="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>

<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>

<aop:config>
<aop:pointcut id="allServiceMethod"
expression="execution(* kohisa.cn.service.impl.UserService .*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="allServiceMethod" />
</aop:config>

        <bean id="userDAO" class="kohisa.cn.dao.impl.UserDAO">
            <property name="sessionFactory">
                <ref bean="sessionFactory"/>
            </property>
        </bean>
    
    <bean id="userService" class="kohisa.cn.service.impl.UserService" >
        <property name="userDAO">
            <ref bean="userDAO"/>
        </property>
    </bean>
    <bean id="myDwr" class="kohisa.cn.dwr.MyDwr">
        <property name="userService">
            <ref bean="userService"/>
        </property>
    </bean>
</beans>
TIOBE 2013年11月编程语言排行榜:C#、Transact-SQL及VB.NET厚积薄发 透过KitKat,Android或与ChromeOS融合? 利用Spring Data Neo4j搭建推荐系统 七丽借百度SiteApp移动化 分发及变现能力获大幅提升 Go语言4岁了 生日快乐 谷歌发布Web延迟基准测试工具 专访JS-Git创始人Tim Caswell:让Git运行于任一平台 一段代码引发的思考 2013年美国开发者薪资调查报告 MDCC之移动娱乐游戏峰会:金玩奖揭晓最火游戏 算法为王:且看Mac Mini如何超越1636节点的Hadoop 鲍尔默成大善人?微软正式废除员工排名评审制度 工信部软件司副司长陈英为MDCC 2013大会致开场辞 全民移动•重塑世界 2013移动开发者大会盛大开幕 泯灭Web App可用性的七个开发错误 保益互动创始人曹军:听到的世界更精彩,盲人应用背后的故事 Gumi公司CEO国光宏尚: 大公开!日本手游市场攻克方法! Great Hill Partners高管Chuck Goldman &amp;amp; 南京创毅CEO William Wei:超越黑莓——下一代企业移动 高通业务拓展副总裁沈劲:智能手机2.0——以体验为中心 百度副总裁李明远:百度轻应用——长尾APP的最佳选择 中国工程院院士李德毅:大数据时代的认知计算 创新工场联合创始人汪华:2013年中国移动互联网进入深入区 百度副总裁李明远:解答关于百度轻应用的八大疑问 谷歌推出PNaCl,帮助开发者在任何硬件和网站上运行代码 阿里云:双十一350亿交易额的幕后英雄 索尼移动智能设备全球技术总监Goran Andersson:索尼移动可穿戴设备解决方案 腾讯社交网络事业部副总裁陈磊:腾讯移动开发者服务体系 基调网络副总裁陈靖华:全面掌握移动应用性能 蓝港在线创始人王峰:手游新时代下的机会与挑战! Couchbase CEO Bob Wiederhold:数据库云端同步,移动应用开发的未来 三星电子大中华区副总裁黄伽卫:构建移动互联生态,解读内容服务新方向 如何使子类的属性不可见 我想画曲线,类似log曲线的样子,不知道vc里面怎样才能方便的实现,有源码最好 特酷的串口通讯调试工具,有其它工具... 请问如何用电话线将各分公司连网,并实现数据上传功能,以保证总公司的数据汇总,CSDN的高手到那里去了,我已经第二次提了,没有一个人回 请指教! 特酷的串口通讯调试工具,有其它工具... 菜得不得了的 问题,从SQL SERVER中导入一个表(如表名QK)到ORACLE后,不知表名变成什么? 怎样看到PowerBuilder User’s Guide使用手冊。Application Techniques使用手冊呀? 一直想看古天乐的《创世纪》,请哪位提供一下网上哪里有它下载或在线看网址,不甚感激! 为什么一执行文件ss.txt得内容就清空了??? 中文问题 特酷的串口通讯调试工具,有其它工具... sos sos 求,向access2000中写数据的asp代码?和用asp连接access有几种方法? 如何保存xml的网页,谢谢! 如何声明一个变量,可在整个程序内调用,并其生命周期和程序一样长??? 请推荐一本数据结构的书,最好是大学教材,c++描叙,写了 求助:vc++ 6.0中,用向导生成了一个windows程序, 我又新加了一个工具条,怎样让它和以前的工具条在同一行上? 请问VIA VT82C686A芯片的主板最大支持的CPU是多少?? 怎样看vb中控件的代码?如:from,command... 大家帮我看看这段代码哪里错了???? 在jbuilder6下如何存取中文数据库,内码的转换如何实现?高手请进,100分奉上 请问如何在dbgrid控件中 第3列=第2列×第1列 有什么方法可以获得页面信息 菜鸟请教一个复杂结构类型结构体成员变量初始化赋值出错的问题。 CDC实现图片运动问题,请大家多多帮忙?如何擦掉已经画出的图片 那里有Delphi函数表?API的个人理解,希望修正!(新人学习在过程中的问题) exchange的路由器问题 WinFax的烦事。 请问IsProxyClass函数在哪找 请问怎么才能实现将一个datawindow中的某一列拖放到另外一个同样的datawindw中 有报考今年3月份高教自考《计算机及应用》专业的朋友吗? 我要找C!各位帮忙! 为什么在MS_DOS下运行MySQL提示"This program cannot be run in DOS mode"? 关于 Execute 为什么在VS.net beta2开发的东西,在安装正式版后运行不了 请问 有谁知道《c++ primer》那里可以下载?? 怎么不能删除啊???????? 同居愉快! 请问:dos环境下c语言中有没有多线程?如果没有那么飞机游戏中不同的飞机同时运动怎么办. php的安装问题!!!! 为什么我安装PB8后只显示支持INFORMIX V9。0而不支持V7。0 pb怎么从数据库中取出text类型数据 服务器设置问题 请问哪里能下载到游戏开发的入门书籍,或者介绍经典的书 很久没有来这里了,散分道歉~~~ 如何从存储过程中返回记录集? 高手请指教:我有一套VS7(English)版,不想再买中文版(穷呀),不知有无办法把其进行汉化(主要想把MSDN换成中文,我发现好像在vs7的选项 高手请指教:我有一套VS7(English)版,不想再买中文版(穷呀),不知有无办法把其进行汉化(主要想把MSDN换成中文,我发现好像在vs7的选项 我有一表单,希望点击递交按钮后能新开一个窗口,并在新开窗口中显示内容,怎么做?我现在每次都在本窗口内显示 实验室用加热无水醋酸钠和固体氢氧化钠混合物的方法制取甲烷,反应生成气体CH4CH4用什么方法收集?发生装置和制取哪种气体的装置相同? 喜怒哀乐中的喜和乐有什么区别? 水蒸气的快慢与什么因素有关.假设: 北京到上海的距离约为1000km,假设声音在空气中能传播这么远,那么声音从北京传到上海需要多长时间 我是山头火命我妈是天河水命有什么办法吗 认干爹干妈以外还有什么办法 水蒸气的快慢与什么因素有关 北京到上海的距离约为1000km假设声音在空气中能传那么远那么从北京传到上海需要多长时间?火车从北京到上海需要多长时间?大型喷气式客车机呢?2丶用超声测位仪向海底垂直发射声波,经过4s 我命属火喜水,五行火旺缺木,那搞该补什么呢?应该补啥呢?为啥没人回答呢. 请填写“水蒸气的快慢与什么因素有关”的实践报告.假设:实验不骤:结论:(要最最最好的哟) “雪是怎样形成的”故事内容讲解 自吸泵厂家那家的性价比高? 元宵节的作文500字 “雪是怎样形成的”故事 青藏高原对周围气候的影响 元宵节的作文500字 故事:开国大典发生的时间、时期、人物、地点、讲得主要内容现在就要 八字很弱,属于从弱格局,宜补充火木水, 跪求《包汤圆》的作文 我家发生了很恐怖的事情,在我读初三那年,我妈妈晚上睡觉时,听到床边有喘息声,把电灯开亮就小声点,把电灯关了又大声了,楼下有人拿着杯子涮牙刷,但又没听到倒水的声音,就只是牙刷碰杯 为什么高山气候地区喜马拉雅山青藏高原 海拔高日照那么强烈而终年低温积雪不化?以前好像学过,不过忘记了, 给我一片第一次包汤圆的作文要加上精彩开头和结尾 在初二物理书升华与凝华中有一个例子是沙漠中的雪瞬间不见,这里是中国最干旱的地区,年降水量只有13毫米,蒸发量高达4000毫米 .气温一直是零下14度 为了改善周围环境被污染的状况,保护环境,你将采取哪些行动,说说你的计划 春节包汤圆作文结尾结尾最好是要说道汤圆表示着团团圆圆等这种类型,因为我写的就是包汤圆这件事,但是一定要跟春节有关系的结尾. 如果让落叶归根为什么能使土壤里的水分蒸发变慢答案越快越好 黄土高原上的人们一般居住在哪里? 印度气候 谁有 赵本山落叶归根 如果我的家乡的mp3?就那个如果我的家乡是一片大海,我就是一条小鱼,我游啊游,我多快乐!如果我的家乡是一条大路,我就是一辆汽车,我跑啊跑,我多快乐!如果我的家乡是 黄土高原的人们怎样生活 印度境内大部分地区为什么气候类型知道的告诉一下,. 对于落叶归根你有什么看法 想要知道喜马拉雅山脉的气候,最好是随高度、时间等的变化来描述 印度新德里的气候类型? 物体做变速运动就一定有外力作用 落叶归根怎么做 如图是实验室用大理石与稀盐酸反应制取二氧化碳并验证其性质的实验,试根据题目要求回答下列问题:(1)图A中仪器a的下端要伸到液面下,原因是;装置C中观察到的现象是,其中发生反应的 雪霁什么意思 制取甲烷的时候为什么要用高锰酸钾制取氧气的装置 关于正月十五包汤圆的作文 雪霁 青藏高原的隆起对我国东北地区气候的影响 给我写篇元宵节的作文 从板块构造理论看,与喜马拉雅山脉形成有关的两大板块是 A.亚欧板块和太平洋板块B.太平洋板块和印度洋板块C.印度洋板块和非洲板块D.印度洋板块和亚欧板块 设计两个关于“家乡环境建设过程中存在的问题“的调查问题 房顶面积是100平方米,在1个标准大气压下,房顶受到向下的压力? 物体运动状态改变的难易程度取决于惯性的大小 对么? 北京到上海的距离为1000km假设声音能在空气中能够传这么远那么火车从北京到上海要多长时间,大型喷气飞机 房顶面积为50平方米.在1个标准大气压的作用下,房顶受到向下的压力约为快 惯性的大小决定其运动状态改变的难易程度?如题 不要太深奥啦! 喜怒哀乐中的喜和乐是不是重复了?我觉得喜和乐都是一个意思,人的情绪里还有一种叫恐惧.叫喜怒哀恐是不是更合适. 屋顶面积是15平方米,在一个标准大气压下,空气对屋顶向下的压力是多大?这么大的压 尤袤的古诗雪的解释 “喜怒哀乐”中的喜和乐有什么区别? 屋顶面积为120m³,在标准大气压下空气对屋顶向下的压力是多少 双鬓堆雪 喜怒哀乐这个词里,喜和乐的区别是什么 黄土高原的人们的生活有什么不同 找几带雪的诗,找带雪的诗,越多越好,不带雪还是写雪,都行, “喜怒哀乐”中的喜和乐有何区别?求权威的解答. 元宵节作文500字
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘