java编程,ssh结构,用了spring声明式事务,有点问题
声明式事务,控制在service层service里调用了dao这时dao在不在事务控制范围内?...
声明式事务,控制在service层
service里调用了dao
这时dao在不在事务控制范围内? 展开
service里调用了dao
这时dao在不在事务控制范围内? 展开
1个回答
展开全部
那得看事务传播属性
<tx:method name="update*" propagation="REQUIRED"/>
propagation 即为事务传播属性,为“REQUIRED”时,A调用B,若A已经有事务,则B也加入该事务中;若A没有事务,则B新建一个事务;
为“SUPPORTS”时,A调用B,若A已经有事务,B也有事务;若A没有事务,则B也不启动事务。
所以,控制在service层,service里调用了dao,配置propagation="REQUIRED"就可以把事务传播到 dao 层。
下面是我配置的hibernate事务
<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.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<!-- 值班管理模块 -->
<bean id="sessionFactory_zbgl" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate-zhibanguanli.cfg.xml</value>
</property>
</bean>
<!-- Hibernate事务管理配置 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory_zbgl"></property>
</bean>
<tx:advice id="tx" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="pc" expression="execution(* com.richwayAppService.fangxun.zhibanguanli.business.impl.*.*(..))"/>
<aop:advisor advice-ref="tx" pointcut-ref="pc"/>
</aop:config>
<!-- Hibernate事务管理配置结束 -->
</beans>
说明:
1.事务必须得有事务管理器来管理(须指定sessionFactory属性,指管理哪个连接)
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory_zbgl"></property>
</bean>
2.定义adivce,<tx:advice>,<tx:method name="update*" propagation="REQUIRED"/>
其中 name 指那些方法应用事务,propagation 指事务传播属性,
3.再通过aop织入 <aop:config>(具体配置意思请自查)
<tx:method name="update*" propagation="REQUIRED"/>
propagation 即为事务传播属性,为“REQUIRED”时,A调用B,若A已经有事务,则B也加入该事务中;若A没有事务,则B新建一个事务;
为“SUPPORTS”时,A调用B,若A已经有事务,B也有事务;若A没有事务,则B也不启动事务。
所以,控制在service层,service里调用了dao,配置propagation="REQUIRED"就可以把事务传播到 dao 层。
下面是我配置的hibernate事务
<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.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<!-- 值班管理模块 -->
<bean id="sessionFactory_zbgl" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate-zhibanguanli.cfg.xml</value>
</property>
</bean>
<!-- Hibernate事务管理配置 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory_zbgl"></property>
</bean>
<tx:advice id="tx" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="pc" expression="execution(* com.richwayAppService.fangxun.zhibanguanli.business.impl.*.*(..))"/>
<aop:advisor advice-ref="tx" pointcut-ref="pc"/>
</aop:config>
<!-- Hibernate事务管理配置结束 -->
</beans>
说明:
1.事务必须得有事务管理器来管理(须指定sessionFactory属性,指管理哪个连接)
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory_zbgl"></property>
</bean>
2.定义adivce,<tx:advice>,<tx:method name="update*" propagation="REQUIRED"/>
其中 name 指那些方法应用事务,propagation 指事务传播属性,
3.再通过aop织入 <aop:config>(具体配置意思请自查)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询