我希望可以配置spring管理hibernate事务,当一个service调用多dao的时候,全部save成功才commit,可以怎么实现?
这是配置文件
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" />
<bean id="accountManagerTarget" class="com.vas.brd.service.impl.AccountManagerImpl">
<property name="userOrderDAO"><ref local="userOrderDAO"/></property>
</bean>
<bean id="accountManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="accountManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
/*******************************************************************************/ sevice就没写了public class AccountManagerImpl implements AccountManager {
public SyncResponseInfo saveKnSyncData(){
//1
dao.saveObject2(object1);
//2
dao.saveObject1(object2)); //当1成功,2失败.1提交的数据不会回滚????。
}
} 如何才能实现这种,是不是不应该用这种事务管理?有高手帮忙详细解释一下关于事务的内容?
我这问题和这个贴差不多,但回答的结果也不是很理想:
http://topic.csdn.net/t/20050922/11/4286441.html
这是配置文件
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" />
<bean id="accountManagerTarget" class="com.vas.brd.service.impl.AccountManagerImpl">
<property name="userOrderDAO"><ref local="userOrderDAO"/></property>
</bean>
<bean id="accountManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="accountManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
/*******************************************************************************/ sevice就没写了public class AccountManagerImpl implements AccountManager {
public SyncResponseInfo saveKnSyncData(){
//1
dao.saveObject2(object1);
//2
dao.saveObject1(object2)); //当1成功,2失败.1提交的数据不会回滚????。
}
} 如何才能实现这种,是不是不应该用这种事务管理?有高手帮忙详细解释一下关于事务的内容?
我这问题和这个贴差不多,但回答的结果也不是很理想:
http://topic.csdn.net/t/20050922/11/4286441.html
解决方案 »
- 求助SSH如何配置Jboss连接池
- java.lang.reflect.InvocationTargetException错误
- ssh整合,启动正常,但是出现了如下错误,请问大家怎么回事啊
- JAVABEAN接收不到JSP提交的表单
- 怎样在jsp中解决乱码问题?
- 下载文件 急!!!!!!!!!!!
- 关于JFreeChart的奇怪问题,很急啊!!!!!!!!!!!
- 关于StatefulBeanHome接口的create()调用问题
- EJB2.0中 CMP BEAN 如何实现多表映射?
- Jfreechart的图例怎么设置右上角啊!
- 耦合性与运行效率更注重哪个?耦合越低越好?
- 关于HTTPCLIENT超时的问题
//2
dao.saveObject1(object2)); //当1成功,2失败.1提交的数据不会回滚当1成功,2失败.1提交的数据不会回滚啊
<!--transsactionManager-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
<property name="sessionFactory" ref="sessionFactory"/>
</bean> <!--advisor-->
<tx:advice id="txAdvice1" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice> <!--设置哪些类配置声明式事务-->
<aop:config>
<aop:pointcut id="pointcut1" expression="execution (* com.mkk.ssh.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice1" pointcut-ref="pointcut1"/>
</aop:config>要不用使用Hibernate的currentSession.也可以.
<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="find*" propagation="REQUIRED" read-only="true"/>
<!-- 其它方法使用普通事务 -->
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<!-- aop切入 -->
<aop:config>
<aop:pointcut expression="execution(* com.ssh.service.*.*(..))" id="interCut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="interCut"/>
</aop:config>
是checked受控异常,应该就是这个原因了.
在这种配置当中没有rollback-for这个属性,看来只能使用<tx:method>或者使用@Transactional1.
<!-- 配置事务通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
2.@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)难道我的这种配置里在这种情况就不能够让它回滚,还是我没有找到像rollback-for这种属性.谢谢你的回答