2017-04-07 70 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