繁体   English   中英

春季回滚交易部分

[英]Spring rollback transaction part

我配置了spring和hibernate事务(每个服务调用aop并回滚Throwable)。 我需要支持cretePartA()的以下要求:

  • 不应使主事务失败,在我的示例中为cteateSmth()
  • 如果失败,应该回滚它自己的事务

    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM