我需要在一个事务中管理2个Dao方法,其中任何一个的失败都应该回滚另一个。调用方法位于服务层中。该技术用于Spring和Hibernate本机sql查询。有没有办法实现这个目标?
调用方法::
Message
叫做Method1 ::
@Transactional(propagation= Propagation.REQUIRED)
public String save(AllowFileTypesForm formBeanObj,Hashtable global)
与此方法类似,还有另一种方法可以删除其他表中的数据。
答案 0 :(得分:2)
它不会回滚,因为您正在捕获异常。 Spring的事务管理通过退出事务边界的异常来处理,这些异常由@Transactional AOP检测。
如果您捕获sql异常以进行日志记录或其他事情,则必须重新抛出或抛出新异常以启动回滚。
答案 1 :(得分:1)
在您调用这些DAO方法的服务方法上添加@Transactional
。 This文章很好地总结了它的工作原理。