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

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

编辑:说三道四文库 发布时间:2017-06-27 10:03
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>
Java内存模型的历史变迁 Java 8与Apache Ignite Java开发与技术挑战——关于技术的技术思考 专访唯品会架构师肖桦:做编码的架构师 越来越“简单”的Java 我的Java!越过山丘 专访沙梓社:做个“Think Different”的技术牛人 基于ES6,使用React、Webpack、Babel构建模块化JavaScript应用 财税街创始人石克清:创业须空杯心态+有效社交 自我知识管理:连贯性就是生产率 玩转Google I/O 2015:Android M、IoT、Glass 2.0、VR、ATAP ARC中Retain Cycle揭秘 失控与逆转!企业移动化2.0时代下如何求变? 玩转物联网之MQTT 专访都灵创客教育奚炎:被忽视的Maker教育 13岁iOS开发者:Swift开发Sprite Kit游戏实践 专访豌豆荚「自动装」开发团队:无需Root即可批量点击「下一步」 iOS项目的持续集成与管理 《近匠》谛听科技,探索智慧家庭的智能网关 【简讯】Python 3.5.0b1发布 《算法的乐趣》作者王晓华访谈:多看、多做、多想是秘诀 专访李祎:Java在Testin的技术应用 React首部经典图书推荐:全程经典实例,360度剖析React.js 再做一个Android!Google发布第二代VR眼镜Cardboard Go语言开发常见陷阱,你遇到过几个? 奏响年度最强音 第七届中国云计算大会日程全公布(表) 【CTO讲堂】请在还年轻的时候,尽量多踩些坑 以细分使用场景为突破点 探究墨迹天气的体验创新 熟练成就创造——MathWorks全球副总裁Richard Rovner、产品市场经理赵志宏专访 Objective-C编码规范:26个方面解决iOS开发问题 豌豆机器小组发布最新WRTnode2R,支持华为Liteos、QQ物联与AllJoyn kylix3下怎么调试多线程程序? 散点分,顺便求个方法,up有分,三日定结! 用VBA调用EXE文件 Boundscheck 怎么用呀? 在windows98下怎样用windows API 取得中文字符的宽度? 我没装过Linux也不知道这个操作系统怎么装 和有什么不同!希望大家给点意见 我侵权了?? 如果在pb中使用fpt传送文件 有关于WinSocket编程,CB和VC之间应该如何进行接口 请问?将一窗口始终置于其他窗口的最前面,这段代码怎么写?在线等待! 关于控件下载 请大家帮忙看一下,这段调用存储过程的代码有什么错误?在线 [寻人]请红旗下的蛋过来领分喽。说话算话。 jsp后缀名大小写问题(急,在线等!) 100分!急!如何在程序中判断sqlserver服务是否启动? 有什么比较深入的c语言的书? Delphi出现问题,请帮忙解决。 用java编程序,将String数据通过存储过程存入数据库,为什么有的时候cs.setString()好使无常呢? 求助:如何读出mshflexgrid栅格表头项的内容的宽度? 高分!! 问一个引号的问题,望高手们不要见笑 pb中怎样得到某个字符的asc码? 谢谢 ChangeDisplaySettings最低可以把分辨率和颜色设为多少呀? DataGrid+CheckBox的问题(查了很多例子就是解决不了) 再次提问,sql2000的问题? 请问在vbscript中怎样判断一个数,是否能被3整除 MSN Messenger5.0发送文件到MSN Messenger4.6,为什么总是连接不上? sql2000的问题,谁能知道? 100分:誰有thinking in java 2 的中文電子書和例子代碼,給我一份吧? 关于将图形放大缩小的问题. jsp后缀名大小写问题(急,在线等!) sourceforge主站上不去了,那还有比较大的sourceforge站点?最好是美国的。 如何取得一个程序的内存占用率,cpu使用率等信息呢? 如何解决MSN Messenger5.0不能发送文件给MSN Messenger4.6的问题? 怎样把时间放到数据库表里,格式需要转换吗? 文件操作,帮个忙吧? simple question 60 points wait for your picking 如何卸载rose 分虽小,结得快的啊!讨论一下…… option explicit是什么意思 大哥大姐们!看一下嘛!帮帮我! 又一次被奶牛拒掉,而且有了注册机。 simple question 60 points wait for your picking (菜鸟的问题)在EditBox中怎么换行? 超级难题 SQL如何写??? 如何让WinCE支持DVDROM 請問如何在ASP.NET中實現從客戶機上傳文件到服務器? 新手问:我声明api,但是参数里有我没有定义的类型,pb报错,怎么办 关于Tclientdataset中commandtext的问题 关于按扭的简单问题 调用ejb的错误,请帮忙看看,帮我顶顶也给分,谢谢 关于lei的配置问题 Let's go and _______.A.play the basketball B.have a lunch C.listen the tape D.play volleyball 急用!我脑袋太笨!有10箱橘子,最少的一箱装了50个,如果没两箱中放的橘子都不一样多,那么10只箱子一共至少装了( )个橘子. 非限制性定语从句一定可以用where when代替吗 什么时候用介词加关系代词 be used to sb's 脑子太笨怎么办?本人在外面打工,他们都说我脑子太笨,我真的好难受,好痛苦! three——(five)of the water there has been polluted because of the factories nearby be used for 中国的主要河流有哪些只要名称就好 she knows three other foreigh lauguages ____ english. 请问填Bisides or except? 两种用法有什么不同?如果改成she knows the three other foreigh lauguages __english, 又有什么不同? 谢谢who will he invite to hia party?he will invite 说sb.used to be是“过去常常”的的意思吧?那么she used to love me.好像有这种说法吧?可是难道翻译成 她过去常常爱我?我觉得 它只是“她曾爱过我”的意思RIGHT? 我在博客上使用英文全是为了让你能够看懂.这句话用英语怎么说啊? where能引导非限制性定语从句么?Readers love the start of a story, ______ there are new and sometimes strange people to be met for the first time.A.where B.when C.which D.whether答案说应选where,因为where引起非限制性定语从句 be used to sb习惯某人 有没有这样的说法? often,read,you,after,book,supper,do(?)怎么造句? where是否能引导非限制性定语从句? my mother kept at teaching me read and write.可否把at 去掉,为什么. donate sth to sb中sth充当什么语,to sb充当什么语? 写出下列动词的第三人称单数形式、现在分词和过去式.1.live ______ _______ ________ 2.walk _______ _______ _______ 3.pick _______ _______ ________ 4.lose ________ ________ ________ 5.look ______ ________ _________6.notice ________ My grandpa can't read and write 改错 ask sth to sb ask sb sth Not only the air but also the water here has been polluted.(改为否定句)____ the air _____the water here has been polluted My mother never ______(read) . give sth to sb的to能省吗? large amounts of 和 large numbers of 和 huge amounts of 的区别 My mother asks me to read something ,but i can`t l____ long. 各项为正整的等比数列[An].a4*a7=8则log2*a1+log2*a2+.log2*a10=? The only thing that keeps me wishing on a wishing star 坚持用英文日记很有帮助.翻译成英语 You know,the only thing that scares me is that you might love him more than you love me.翻译. 求一首歌.男的唱的.有一句歌词是“love is the only thing that keeps us alive"如果条件不够我还可以回忆,总之求求大家了. flag table cat hand哪个的a发音不一样急需呀!!!!!!! 我国的主要河流是什么主要河流,中国的哦 中国多少个主要河流 初二英语上册作文 写一篇关于怎样上课的英语作文 急用啊还可以再写几句吗 写上课不能说小话 不能睡觉等 我国的主要河流有哪些 用be away from send sb sth something+adj造句 A grape B face C cat D table A old B ok C often D rose A funny B tofu C mutton D busA we B me C she D veryA like B strict C fish D is A head B eat C meat D pleseA clock B clean C music D niceA umbrella B student C music D tubeA hole B box C nose Dhom 我国东部有哪些主要河流东部有哪些河流啊,还有都有哪些水文特征,还有变化? 我国的主要河流 I can see a cat under the table改为否定句 I wrote my first poem when I was 5 years old.It was (71) f_______ Mother’s Day.The poem was not my best work,but my mom kept it – just like she kept every other piece of writing and artwork I ever made.She (72) a________ kept my baby clothes and 不忘记最危险的时候战歌飞旋..最危险的时候实际上是指的是什么的时候战歌飞旋实际上是指什么 Two balls and a cat ___ ___ the table.两个球和一只猫在桌子上。Two balls and a cat ___ ___ the table.记得好像是按临近的用is,又不敢确,注意,不要there开头的句子! She wrote a poem when she made a tour to what was once a battlefield.本句为啥用what难道修饰poem? 父亲坚决地对母亲说:“不是常对你说吗?我是不能轻易离开北京的.你要知道现在是什么时候,这里的工作多么重要.我哪能离开呢?”1、这段话有两层意思:一层是:( )另一层是( )2、用 初中定语从句 that与where的区别只需that与where的区别(如我出生在某地是用that还是where,我们参观某地用that还是where.),越详细越好,最好的是有例题的,很着急的~好的我会给加分! 求一歌名!只记得歌词有一句“when I was 13,I had my first love”歌词大概就是这样的 All the fish have_____(go)because lots of water comes inro the river. 英语翻译I'm afaid face to face this world.I don't know why.Only you ,baby ,please believe me.I wanted you .I wanted you to take for walk in the street.Ago ,so sweet .But ,you go away .Baby never leave me.I not mature enough ,I wanted you.这是 有be popular by sb吗 定语从句里是不是只有which和as能引导非限制性定语从句?who.where.when.whose.why都不能吗?14题A为什么不可以? be mad at be interview by sb.求翻译! Because of the water pollution,many fish have ___.die dead death 哪个? 1.He taught me to play football.2.My mother was very angry ( ) me and began to shout at me.1.改同义句 be praise by sb for sth例句:Our class teacher was praised by the headmaster for his hard and excellent work. when能引导非限制性定语从句吗? -The boy____play the guitar when he was only seven years old -How clever he was! 英语翻译[ti:bye bye][ar:mariah carey ][al:e=mc2][by:活在当下]mariah carey - bye byethis is for my peoples who just lost somebody your best friend,your baby your man or your lady put your hand way up high we will never say bye no,no,no mamas,d fish because water造句
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘