2017-04-07 66 views
1

我有我的服务2种方法@交易多重更新;每提交一个查询

public void updateAll() { 
    long[] ids = new long[] {1,2,3,4,5,6,7,8,9,10}; 
    for (long id : ids) { 
     updateId(id); 
    } 
} 

public updateId(long id) { 
    repository.update(id); 
} 

让我们假设5日更新我有一个异常后,我想的是,前4个操作将反正提交。

我正在使用@Transactional注释,但是如果我在两种方法中都注释它不起作用。

我需要其他参数吗?它可能是传播?

你能告诉我如何设置这个方法吗?

谢谢!

回答

1

只是有:

@Transactional(propagation = Propagation.REQUIRES_NEW) 
public updateId(long id) { 
} 

但是,最重要的一点,从另一个调用类的方法。 即移动你的循环出这个类。

只有在从外部调用该公用方法时,事务注释才会生效。在同一个类中,从另一个类中调用一个事务方法仍将只使用第一个方法的事务。

1

你需要一个单独的@TransactionalupdateIdREQUIRES_NEW

+0

所以它应该是: “@Transactional(传播= Propagation.REQUIRES_NEW) 公共无效updateAll(){...}} @Transactional (传播= Propagation.REQUIRES_NEW) 公共updateId(长ID){ ..} ' – pacio14

+1

@ pacio14是的,看起来像它。只要确保你从另一个bean调用第二个方法* – Eugene