[英]Spring rollback transaction part
我配置了spring和hibernate事务(每个服务调用aop并回滚Throwable)。 我需要支持cretePartA()的以下要求:
如果失败,应该回滚它自己的事务
service1.cteateSmth();
/*started in new transaction*/ public void cteateSmth() { //...some other inserts // should not fail main transaction, // but shoud rollback it's own if is failed anotherService.cretePartA(); //should save state in db in any case recordSmthCreation(); } public void cretePartA(){ updateSubpartA(); updateSubPartA1(); if(!sucees) throw new ValidationException(); }
在上面的示例中,即使尝试对cretePartA()进行捕获包装,整个cteateSmth()事务也将回滚。
我尝试使用REQUIRES_NEW进行此操作,但在这种情况下似乎无法回滚cretePartA()操作。
TransactionDefinition transactionDefinition = new DefaultTransactionAttribute(TransactionDefinition.Propagation.REQUIRES_NEW);
new TransactionTemplate(transactionManager, transactionDefinition).execute(new TransactionCallback()
{
@Override
public Object doInTransaction(TransactionStatus status)
{
try{
cretePartA()
} catch (Exception e){
}
return null;
}
});
我试图不为cretePartA()创建新的事务,只是超越了Spring aop的服务调用。 但是在这种情况下,cretePartA()的结果将被认可。
我用cretePartA()方法的注释@Transactional(propagation = Propagation.REQUIRES_NEW)
解决了这个问题,并尝试/捕获了块
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.