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

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

编辑:说三道四文库 发布时间:2017-08-21 10:17
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>
真的不够用!Apple Watch常规使用续航3.5小时 Activiti实战 百度BAE携手科技寺助力应用一站式部署 不仅仅是高速传输,Qualcomm演示骁龙810处理器功能 利用JS高效开发原生游戏 Cocos 2d-JS中文版API文档正式上线 同行代码审查实战分析 在Swift中使用JavaScript的方法和技巧 增强用户体验 让网站和APP更具动感的几点建议 《近匠》蒲公英:一站式免费应用内测平台 用Swift开发iOS 8新应用:斯坦福免费课程上线iTunes U Swift开发必备技巧:static和class的使用 你可能没听过的11个Python库 移动Web技术的春天来了?Facebook发布React Native,用JavaScript开发移动原生应用 开发不易!2015年移动应用开发趋势总结 .NET开发者必备的工具箱 热情不减!七款Swift应用开源项目推荐 如何给苹果提交Bug或功能需求? 深入钻研Augular两年 谈谈其究竟适用于哪些场合 唐巧:谈谈React Native 在Swift中,如何更优雅地处理网络返回数据? Spark生态系统解析及基于Redis的开源分布式服务Codis 阿里巴巴技术专家杨晓明:基于Hadoop技术进行地理空间分析 Bowery为什么放弃Node.js,转向Go? 《近匠》有了APM,用户快到碗里来——专访听云CTO Wood 联通WO+梦工厂唐敏:走进厦门 构建移动数字生态 HTML5 VS 原生,世界究竟是谁的? 完全开放 微软开源.NET Core的执行引擎CoreCLR Swift与Objective-C的兼容“黑魔法”:@objc和Dynamic 网络技术,从“数制”开始学起——跟随王达老师一步步学习 UPYUN CTO黄慧攀:UPYUN这些年,一段“刚好”的旅程 2015移动游戏重中之重:需成功把握1%付费用户的心 高手指教 配机!!求助!!(进者有分啊) 这样简单的程序怎么通不过! session值修改还是未解决。 一个问题? flashget怎么用? 怎么相应动态创建的控件的事件 关于多媒体播放器的问题 快结婚了,可男朋友依旧把前女友的照片当成宝贝,我该怎么办? 建议组织一个水园老五大联盟。有支持的请up ! jspsmartupload上传100M以上的文件报错怎么办? 高分求助! 在那里下载jsp服务器的软件? 大家帮个忙,急寻南京兼职,饿死了 在unix下如何编译自己写好的c语言程序? 有个问题请教 ? 保存电脑技巧的问题。 在linux下怎么使用SAMBA使用windows下面的东西? 菜鸟级问题 我要在com+中间层返回sqlserver服务器的时间,怎么通过sql语句实现? 女友是空姐没有安全感怎么办 有几个概念不清楚, 劳驾哪位给解释一下 在unix下如何编译自己写好的c语言程序? Listbox 拖放的问题!解决就给100分! orical 我的测试连接失败! 小问题,别笑! 新手对指针的理解,大家指点指点,多谢!! 重载问题??? 高分求助! 哪里有截取vpn数据包的代码学习啊??? 怎样写贴子的标题才能吸引大家的注意?举例者一律给分! 关于API 为什么我的资源管理器反应很慢? 南京远志科技公司怎么样,马上要去面试了,请大家谈谈情况 请问这是什么意思 100分马上给 升四个▲了,散分!!!顺便问问那些两个星星的,你们升到两个星星以后的心情是什么样的?会不会有些失落感? 谁知道mediaplay控件 有没有直接到 一段视频文件结尾的方法 用quickstart出现地问题 小弟没写过事务,请教下面这个功能怎么写 万分着急! 在线等候!求和问题 怎么在sql server 的存储过程中调用它的异常处理呢? 劳累了一天了,希望在水园的朋友们今晚愉快:) hub上的uplink口跟其他的有什么区别啊? 为什么灌水圆只有回复数,没有点击数!强烈要求显示点击数!同意的近来投票! 帮帮忙 正则表达式,验证TEXTBOX输入的是手机号码,并且textbox不允许空着。 c#里求y=sin(x)怎样实现的?用什么类? 关于UI 线程的奇怪问题,请高手指教 来者有分,求和问题!! 一个关于C++与数据库连接的问题!-----------100分 细胞生长,核糖体的数量增加,物质交换速率增强为什么错( ⊙o⊙?) 摩尔根是什么 在医院中的ECG检查是心电图检查吗?正常人的血压范围是多少? 布洛维光学硬度计技术参数是什么? 摩尔根怎么样 饰品镀金厚度单位怎么称呼?电镀公司说一般镀金为:0.5 中文发音好像是 (“买”字第一声调)请问这个单位是什么?有多厚?是不是用 um 作单位的? 胶黏剂的表面张力越大,表面能越低,粘接效果越好,是这样么? 摩尔根的故事 问下在XP中如何计算我写的文章字数 有谁了解的说下吧,不好意思, LC振荡电路中为何当电容中q最小时,电路中I最大?为何当电容中电量最小时,电路中电流最大?希望从过程分析,不从能量角度 当电容电压大于交流电源瞬时电压时,电容是否会放电吗?我想知道电容在交流电的情况下,其充放电的详细过程?还有其串联回路中的电阻电压变化情况及其波形是怎样的? 问下在XP中如何计算我写的文章字数有谁了解的说下吧,不好意思,麻烦各位1G 世界上会用流线型下降的鸟是什么 平行板电容器串、并联电压与电源电压各为什么关系?为什么? 请问大家下在XP中如何计算我写的文章字数有谁了解的说下吧,不好意思,麻烦各位9G 女性泌尿系统有哪些器官构成 谁知道做害怕意思的shen是哪个字呢? 自由电子是从负极到正极吗?甲、乙两个金属球,甲球带正电,乙球带负电.若将它们接触,则(C)A.自由电子从甲球到乙球,电流从甲球到乙球.B.自由电子从甲球到乙球,电流从乙球到甲球.C.自由电 开姆洛克《220.205》怎么和橡胶粘不牢啊粘住以后很容易就开了粘不牢啊.还有就是6108怎么样啊.金属与胶粘剂粘不牢.铁件上都用砂轮机打磨过. 关于什么EXOmv闹鬼是怎么回事= 看留言说很恐怖所以就特意没看那里,很好奇那个闹鬼的画面是什么?如题 自由电子定向移动是不是由负极移到正极,电流方向是不是由正极移到负极 涂有开姆洛克220的金属与橡胶出现脱离现象是什么造成的吧求求各位大哥大姐们,205做底涂,能举几个实例吗? 请问大家一下在XP中如何计算我写的文章字数 有谁了解的说下吧,感受大伙了劫3 原电池,负极的自由电子为什么会无缘无故全跑到正极啊,而且是全部,锌那边真的一点H2都不生成吗Zn那边真的不会生成一点H2吗, 列克纳与开姆洛克有什么区别大面积的金属与橡胶粘结哪种比较合适 谁知道在XP中如何计算我写的文章字数 有谁了解的说下吧, 高锰酸钾和甲酸怎么反应(在碱性条件下) 氢氧化钠和氯化铝的问题向a mol NaOH溶液中逐滴加入含b mol AlCl3溶液 若a+b=1,当a取不同值时,生成物可能有如下情况,试回答:(1)全部是氢氧化铝时,a的取值范围是_(2)全部是偏铝酸钠时,a的 请问大家一下在XP中如何计算我写的文章字数 有谁了解的说下吧, 细铜管堵住了怎么办 内径是1毫米长度为5公分而且一端带弯头 里面是潮湿的重钙 氟橡胶跟金属连接用什么胶 用开姆洛克205行不行 还需要添加什么开姆洛克其他型号混合吗? 枭字怎么拼读 并说明理由 为什么我的硬度越来越差了,没有性生活也没有手 淫,有什么办法可改善甚至加强?还有真的有药物能使小弟弟增大增粗吗 倩字的罗马拼音怎么拼写? 地球上现存体形最大的鸟是什么? 泌尿系统的主要器官 凸透镜使光线折射?凹透镜使光线反射?这两句话对么? 怎麽样将弱肉强吃改为:强肉弱吃 定理了这个社会自然界真是弱肉强吃如:一辆大货车(强者)撞了一个小妹妹(弱者)如:一个老虎(强者)吃了一只小鸡(弱者)如:一个恶霸(强者) 泌尿系统的主要器官是() sheng(shen)得慌怎么写? ECG electrode是什么东西朋友喝醉酒,被送回来 肚子上被贴着这个东西,请问是干啥的? 分辨石头同学们都喜欢小明从乡下带来的漂亮小石头.小明从中取出两块石头说:“这两块石头,一块是高山上的,一块是海边的,谁能最先分辨出来就奖给谁.”同学们,你能分辨出来吗?请说一说 (shen/sen)得慌那个字怎么写? ECG-LVH是什么? “.shen"重怎么写 请问大家一下在XP中如何计算我写的文章字数熟悉的看下吧,感受大伙了8e 胃舒宁在胃中发生反应的化学方程式是_______.胃痛时吃几块苏打饼干(含Na2CO3)可减轻胃痛,其反应的化学方程式是:_____________________________。最好半小时内回答、 已知:如图,P是角AOB平分线上的一点,PC垂直于OA,PD垂直于OB,垂足分别为C,D.求证: (1)OC=OD; (2)OP是CD的垂直平分线. 请问下有谁知道在XP中如何计算我写的文章字数 有点着急了啊,打心底麻烦各位 自由电荷从电池正极流出,由负极返回.这句话对吗?自由电荷从电池正极流出,由负极返回.这句话对吗? 什么是原初电荷分离原理? 泌尿系统的主要器官是( 每个( )是由大约100多万个( )组成的?它又是由( ),( ),( )组成. 在闭合的干电池中,电场力电场力如何推动自由电荷充负极向正极运动?这电场力又由什么东西组成的? 为什么电源正负极总保持一定数量的正负电荷.电源没有接入电路时,正负极会保持一定数量的正负电荷吗?我们老师说电路中有电流时,是所有导体和导线中的自由电子定向移动,这样的话正极 谁知道在XP中如何计算我写的文章字数 有谁了解的说下吧,打心底感谢了北4 白云 处有人家,shen是哪个?深还是生?>O 传送带例题在这求几道传送带相关的综合问题(多过程) 有关摩尔根的知识 心电图机英文说明 ECG 8800说明1.PAER SPEED 2.FILER SENSITVITY 3.RESET 4.LEAD 5.SELECTOK 6.START 7.CHECK 以上是 机器上的按钮 英文个位大虾 帮我 塑料人崛起?乐高玩具人数量6年后或超《变形金刚4》香港取景遭勒索 恐吓掷杜青林对西班牙进行友好访问外交部:中印重申不将军事能力用于针对美国艺术家用鸽子从古巴走私雪茄埃及临时政府法律草案规定严打民众示威美农民发现两副恐龙骨架 望拍200万全球最适宜工作跨国公司排行 谷歌名列澳大利亚消防飞机机毁人亡德科学家揭秘太空行走:太空服可被几毫五分之三美国人债务积累超储蓄大洋洲孔子学院联席会议在珀斯召开浙江省政协公开征集提案线索 侧重群众巴消息人士称尸检报告排除阿拉法特死于以色列科学家:真正的发现之旅在于拥有美国艺术家用鸽子从古巴走私雪茄第六届“汉语桥”世界中学生中文比赛开印尼苏门答腊1座火山再度喷发 当地居第二届世界浙商大会26日开幕 马云宗外交部:中印重申不将军事能力用于针对美国农民发现两副恐龙骨架 有望拍出2四川全年没有发生重大食品药品安全事故2014年四川经济社会发展预期目标:鼓励发展非公有资本控股或参股的混合所2014年四川经济社会发展预期目标:日媒:中国反腐会起到提高经济效率目的巴西政府与业者签协议 谨防世界杯“涨美媒称中国利用加油吊舱提升歼-15战四川将支持成都创建区域性金融改革实验2014年四川力争高新技术产业产值达2014年四川将探索建立城乡统一的建外媒:欧盟将因乌克兰问题降低招待普京《产经新闻》:日本成中国人出境游首选建立全省“开放竞争力评价”体系 支持英国外长:苏格兰独立后加入欧盟将面临日刊建议美国定期令中国卫星暂时失灵四川今年将解决盆地雾霾污染 加强污染张兴儒\"慈善光明行\"事迹报告会在浙江法院去年结案首破百万件 人均结案莫让环卫工人休息站成为“面子工程”实惠多了 形式少了 福建2014年“台一男子姓为全台唯一 诈骗集团也无从
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘