ssh中session和事务问题。
程序的结构一般是:action调用service,service调用dao,dao操作数据库,事务加在service上面,如:<aop:config><aop:point...
程序的结构一般是:action调用service,service调用dao,dao操作数据库,
事务加在service上面,如:
<aop:config>
<aop:pointcut id="allManagerMethod"
expression="execution (*
com.edgar.cmmysql.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="allManagerMethod" />
</aop:config>
是不是说在action调用service的时候,就开启事务了呢?
dao里面有:
this.getHibernateTemplate().save(obj);
是不是在save方法执行完以后,刚才开启的事务就关闭了??
session是在事务开启的时候创建的,事务关闭的时候关闭的?
很多的时候一个service里面要调用不同的dao,那么事务是不是就会被多次的开启和关闭呢?
我的理解对吗????
我真的弄不明白,希望高手指点!讲明白了多少分都行。 展开
事务加在service上面,如:
<aop:config>
<aop:pointcut id="allManagerMethod"
expression="execution (*
com.edgar.cmmysql.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="allManagerMethod" />
</aop:config>
是不是说在action调用service的时候,就开启事务了呢?
dao里面有:
this.getHibernateTemplate().save(obj);
是不是在save方法执行完以后,刚才开启的事务就关闭了??
session是在事务开启的时候创建的,事务关闭的时候关闭的?
很多的时候一个service里面要调用不同的dao,那么事务是不是就会被多次的开启和关闭呢?
我的理解对吗????
我真的弄不明白,希望高手指点!讲明白了多少分都行。 展开
3个回答
展开全部
楼上说法欠妥,你的service是一个包,spring提供的采用aop的方式来使用声明式事务,其中pointcut中的expression是定义接入点的表达式,LZ的表达式的含义大概是service包下的所有的类的所有的方法....调用类的时候不会开启什么事务,当service包的某一个类中的某一个业务方法被调用时,事务就开启了.
1.你问的是不是save方法完了之后事务就关闭了,这里其实还有一个事务的传播特性在里面,而spring默认是采用的required,当你在没有事务的情况下调用save那将创建一个事务,当你在有事务的情况调用save则save是参加到当前事务中执行的.
2.你问是不是service中调用不同的DAO,事务会不会被多次开启,不会,结合以上讲,一个是切入点的问题,你的切入口在service而不是dao,所以....第二个,事务是采用的required方式,所以不论从哪个方面来想都可以想通这个问题.
3.session的问题,一般应用中都是"open session in view"的,也就是说在请求的时候打开session,在请求结束的时候关闭session,spring有对session进行管理的工具,如OpenSessinInViewInterceptor之类的东西可以帮组你....
厄....语言表达不好,希望能帮到LZ一些....
1.你问的是不是save方法完了之后事务就关闭了,这里其实还有一个事务的传播特性在里面,而spring默认是采用的required,当你在没有事务的情况下调用save那将创建一个事务,当你在有事务的情况调用save则save是参加到当前事务中执行的.
2.你问是不是service中调用不同的DAO,事务会不会被多次开启,不会,结合以上讲,一个是切入点的问题,你的切入口在service而不是dao,所以....第二个,事务是采用的required方式,所以不论从哪个方面来想都可以想通这个问题.
3.session的问题,一般应用中都是"open session in view"的,也就是说在请求的时候打开session,在请求结束的时候关闭session,spring有对session进行管理的工具,如OpenSessinInViewInterceptor之类的东西可以帮组你....
厄....语言表达不好,希望能帮到LZ一些....
展开全部
当你调用service里面一个方法的时候事物被创建.
无论你这个方法执行了多少个dao里的方法.事物一直都不提交.
对于session的管理与service毫无关系.
是spring自动创建,自动销毁的.
service方法执行完毕,事物提交.
无论你这个方法执行了多少个dao里的方法.事物一直都不提交.
对于session的管理与service毫无关系.
是spring自动创建,自动销毁的.
service方法执行完毕,事物提交.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不对,service上配置事务,也就是说,事务在进入service前,开启。在service调用结束后,提交事务。在service方法中,调用多少DAO,都会在一个事务中,只要一个DAO出现错误,整个事务回滚。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询