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

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

编辑:说三道四文库 发布时间:2017-04-30 05:22
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>
编程语言API,你最青睐哪一款? 推动新输入方式发展:英特尔为感知计算设1亿美元基金 AWS到底有多大?目前看来有158000台服务器 C语言实现树的动态查找 第五届中国云计算大会于北京隆重举行 改变企业移动化:新Google地图API支持用户定制 诺基亚旗舰手机EOS真机图曝光 配备“巨型”摄像头 走进豆瓣:豆瓣的技术架构与团队文化分享 加速Web开发的10款HTML5工具 微软式微?AMD、英特尔等开始疏远Windows 语音技术现状:四千万突破语音产业的技术壁垒? 万维网联盟W3C推荐Web性能API 微软郑子颖:Windows Azure如何支持开源系统和软件? EMC 叶成辉:软件定义数据中心实现统一、开放的管理 百度云主任架构师 侯震宇:云终端开启数字生活 中国工程院院士 倪光南:中国云计算在全世界份额远超3% 信息图:未来的企业移动培训应用与技术 “2013年度中国优秀开源项目征集”活动最后三天 为什么开发者倾向于使用杂乱无章的免费工具 EMC合作伙伴销售经理杜术清:实现云的三种途径 开发者想走向海外:你融入老外的圈子了吗? 前微软工程师:美国监控和直接访问服务器?这不太可能 代码、TDD速查表 如何选择前端架构:服务器端HTML vs. JS部件 vs.单页Web应用 世界上最高深的Android特洛伊病毒 招聘iOS开发,老板必问的5个问题 护航科技吴伟湘:IT离线安全体检服务将带来颠覆 百度王继平:移动互联网时代云平台思路 “第八届开源中国开源世界高峰论坛”火热开启 微软发布SQL Server 2014预览版,展示内存数据库技术 帮助软件开发者提高效率的10个小窍门 如何在word 中链接excel 表格后,不让它随源文件更改而变,但有时又要改变其中数据,怎么做 一个代理服务器问题 一个长久以来悬而未决的问题!! 谁有x.25协议包的格式? 在视图上建立快照日志碰到的问题? 求助:怎么用XSL制作网页菜单? 100分求助如何用DirectShow技术创建ASF格式的文件 数字的从大到小排列问题 300分求多线程解决哲学家进餐问题的源码 关于datalist 武汉的朋友帮忙啊! 严打! 我是新手,谁能告诉我如何新建类? 各位GGJJ,帮帮忙!如果每点击一次button建立一个线程,建立多个不同的线程,怎样实现? 请问那位windows98高手可以帮帮忙忙 各位GGJJ,帮帮忙!如果每点击一次button建立一个线程,建立多个不同的线程,怎样实现? 关于XML中NODE的类型的问题(特急!!!) 大家来帮小弟以下啊,!!! 如果我把一个TAdoQuery变量送到子函数中? 谁能告诉我Bjarne Stroustrup应该怎么读? 说了半天到底谁的是正确的?在100分。delete p 是删去p指针,还是它指到的内容,*p。还是删去什么?free(p) 呢? 大家好,我有一个问题问一下你们很急的。我在线等待!!! 我要去上海找工作(java) 在线提问:各位朋友帮忙啊!很急啊! 关于通过telnet修改2000的用户密码问题 请问有无现存的四舍五入函数?(in vc) 请指教有关bde和9i的问题 帮助!谢谢! 着急!!!!!!!!!!!!!!! 关于CHM文件的菜鸟问题 各位帮帮忙,我的程序重要用定时器,怎么做呀? 为什么没法看贴子? 如何在PB8。0上创建可执行文件,,,,,,(请详细一点) 关于TStrings怎样去取值? 如何编程更改IP? 谁来帮帮我!!!!! 生成密码字典,有什么好主意呢?说说好么? 有关c++中何时分配内存的问题 急救!! 请教:有关列表框 谁有win98操作培训讲义,给我发一份到—— win2000下如何对并口进行操作? 请教IBM Open Class Libraries的问题 小弟高分求“Linux 0.02版”的源代码! 理解csdn,以后再不发政治问题的贴了。我的名字也马上改。 什么是流???(笑话) 讨论.net平台上的软件开发,请教高手 书和方法! 斑竹不要删这个帖子,别人给我做了一个FLASH网站,我放50分给他的:) 为什么看不到 关于拷贝函数 关于高压钠灯和高压钠灯镇流器的问题我的一个客户要了一批70W的高压钠灯,但是他要的高压钠灯镇流器却是110W,如果这样搭配使用的话,是不是会缩短高压钠灯的使用寿命,而且会伤害镇流器 弹簧测力计的下端吊一球,示数为10N,球一半浸入水中,弹簧测力计示数为8N,这时小球所受浮力为2N,求体积.急若金属球全部浸没在水中,弹簧测力计的示数为多少? 1.一只空玻璃杯的质量为300克,装满水后的总质量为700克,若将200克的颗粒状的沙子缓慢的浸没到玻璃杯中,称得玻璃杯的总质量为820克,且玻璃杯的容积为400cm^3.求:沙子的密度.2.空心的金属球 高压钠灯上的镇流器的出现端电压是高压的吗?我是维修路灯的,我听我的同事讲用电笔去量会被触到,是真的吗?被他们说的我都不敢去修了,请懂的师傅多多指教.谢谢了 硅太阳能电池是否利用了原电池原理 如图所示,在光滑的水平板的中央有一光滑小孔,一根不可伸长的轻绳穿过小孔.绳的两端分别拴有一小球C如图所示,在光滑的水平板的中央有一光滑的小孔,一根不可伸长的轻绳穿过小孔.绳 高压钠灯电子镇流器的功率因素一般能达到多少? 蓄电池 串联 并联 容量串联电池容量不变,电压累加.例:一组两只12V*100AH的电池,串联后电压为24V,容量为100AH并联的电压保持不变.容量累加.例;一组两只12V100AH点电池,并联后电压仍为12V.容量按 如图所示,在固定光滑水平板上有一光滑小孔O,一根轻绳穿过小孔一端连接质量m=1kg的小球A,另一端连接质量M=4kg的物体B.当A球沿半径r=0.1m的圆周做匀速圆周运动时,要使物体B不离开地面,A球做圆 我有一个5.5V 110mh的太阳能电池板,要给5V 1000mh的手机充电,可以直接充吗?多长时间能充满?如果不能充,才能使用? 电池串联容量问题电池串联容量为什么不增加?电池容量的mah到底表示什么?电流A不是指若果在1s内通过导体横截面的电荷量是1C,导体中的电流就是1A吗?那1ah就是3600c的电荷了,那两个电池串联 一块长方体水泥板,长4分米,宽3分米,厚1分米,它的表面积是多少平方米? 要实现全面建设小康社会的目标,青少年应怎样做? 盒子上标注的电源条件:太阳能电池5v200mA 聚合物电池3.7V 1000mA DC12 能用手机万能冲充电吗/? 两块12V10AH蓄电池串联后容量是多少? 500克的香蕉是几根?如题 怎么求实际GDP增长率 关于电池串联后的容量 请查看帖子 http://tieba.baidu.com/f?kz=1137287613 因为图片上传不了 帖子里>点击图片>大窗口模式>可查看大图> 造成锂离子电池短路,断路,低压低容,内阻大,等不良情况的原因都有哪些? 木块质量为8kg,放在有摩擦的水平面上,在2N的水平拉力作用下,从静止开始做匀加速直线运动,经5s后位移为2.5m 周公解梦大全查询 梦见两条蛇有一条被我打死了是什么意思昨晚我梦见两条大蛇,一条是蓝花纹,一条是银花纹.刚开始两条蛇在围着一个圆圈嬉闹,我发现了正要转身离开,突然银花纹的蛇向我 锂电池内阻低了会怎么样 质量为3kg的物体,在12N水平拉力的作用下,在光滑的水平面上总静止开始运动,运动时间为5s求;5s内拉力做的功和5s内的平均功率! 动物的什么行为是先天性行为 一条香蕉大概有多少克?香蕉皮不计! 动物的先天性行为包括哪些行为?这些行为有哪些例子?请举例. 蓄电池并联和串联这是两个12伏20安的电瓶,我这样弄是并联还是串联? 是否还是12伏20安?电瓶前边我自己弄的插头能否充电? 用普通电动车充电器行么?要是不行 用什么充电? 锂离子电池鼓壳和高内阻什么原因 动物先天性行为的例子和动物学习性行为的例子有哪些? 蓄电池串联并联容量为什么同样电压同样电流的蓄电池串联与并联后的容量不同,串联与并联,负载的用电电流都是每个蓄电池的1/2,其结果为何不同 500克的香蕉是几根?拜托了各位 谢谢 电池是直流电还是交流电 物体m用线通过光滑的水平板上的小孔与砝码M相连,并且正在做匀速圆周运动,如果减小M的质量,则物体的线速度v的大小变化情况? 如何测锂电池内阻大小电池好像不同电量内阻大小不一样,要是一样为何充电的时候电压低的时候充电电流大,快到4.2V的时候电流比较小 英语翻译韩国带来的,英文看不懂牌子是 Baekhyangskin essencelift creammilk lotion还有一个小瓶上写的是 vase skin essence&lotion 电池串联 容量不变吗? 水平地面上质量为10Kg的物体,在40N的水平拉力作用下,由静止开始做匀加速直线运动,5s末将此力撤去,若动摩擦因数0.3,求总位移 太阳能电池为什么只能选用晶硅做材料呢? 请问哪位高手知道变压器是怎么把交流电转化为直流电的?我要原理,说对给悬赏. 从改革到现在中国GDP平均实际增长率和名义增长率分别是多少 英语翻译GARNIER skin naturals ultralift 1 peeling solution ultralift 2 creme corrector de rugas anti-wrinkle cream cuidado corrector arrugas SHISEIDO Bio-Performance Advanced Super Revitalizer N Super Revitaliseur Absolu N上边两个都是卡尼 2节电池并联容量会怎么样?串联后是不是容量不变? 水平拉力F=100N,10kg的物体在水平地面上,位移16m时,速度达16m/s,2.5s后撤消拉力,撤后,经11s的位移是多少? 硅太阳能电池原理为什莫 太阳能可以转化成电能 为什么要把交流电转变成直流电?现在的家电产品都是靠把220V电压交流电转换成直流电,在经过滤波、降压一系列工作使得家电产品正常工作!为什么不直接用交流电呢?本人是新人,暂没积分!没 国内生产总值指数和GDP增长率有什么区别吗? 非硅晶太阳能电池板的寿命,比起单硅晶的优缺点 急!从变压器的漏电保护器上引出的零线接地为什么不跳闸从变压器的漏电保护器上引出的零线接地为什么不跳闸.我们用的零线是无包皮铝线(3个火线是有包皮的铝线),现在线上有很多树枝 一木块以某一初速度在粗糙水平地面上做匀减速直线运动,最后停下来,若此木块在最初5S内通过的路程与最后5S内通过的路程之比11:5,此木块共运动多长时间? 直流电怎么变成交流电 地线和零线混接漏电保护器为什么会跳闸有时调有时不挑 一批香蕉 卖掉一百四十千克后 原来的香蕉的质量是剩下香蕉的五倍 香蕉原来有多少千克 直流电是怎样变成交流电? 接地工作原理以及漏电保护器的工作原理?为什么接地以后,当是通过金属外壳流入大地,而不是人体触碰了以后流入大地? 关于高压钠灯高压钠灯的灯管,镇流器,电子触发器各自的作用,各自坏了会出现什么情况?怎么其判断好坏?镇流器上标的175W意思只能接175W的灯泡吗?接70W会烧吗?70W镇流器接175W灯泡又会怎样? 怎样将交流电变成直流电(原理),及用到的配件? 为什么漏电保护器的工作零线不能重复接地,我现在没有明白为什么,是不是如果重复接地,就算漏电,漏电保护器跳了,火线和接地会形成回路,照样能有电 高压钠灯的工作电路系统 在高压钠灯的工作电路中除了灯泡外,还必须按内触发高压钠灯或外触发高压钠灯分别高压钠灯的工作电路系统 在高压钠灯的工作电路中除了灯泡外,还必须按内触发 一物体重为10N,当一半体积浸入水中时,弹簧测力计示数为8N.求浸入一半体积时,所受的浮力?求浸入一半体积时,所受的浮力?求物体体积?物体密度?全部浸入时物体所受的浮力 漏电保护器接电网时为什么系统零线不得重复接地?漏电保护器用于接地电网时,系统零线不得重复接地,避免产生误动作,这里说的系统零线是什么意思?为什么说不能重复接地?(我电工基础比
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘