2015-11-05 69 views
0

我需要在單個事務中更新多個表。如何包裝多個JPA EntityManager持久化/合併到單個事務中

目前,我在我的代碼的結構如下:

(僞代碼)

process(updateList, mainObject); // returns list of objects and main business object to persist/update 
persistTable1(mainObject); // table 1 

int objectIndex = 0; 
while(objectIndex < updateList.size()) { 
    persistTable2(updateList[objectIndex]); // table 2 
    objectIndex++; 
} 

問題: 如何包裹persistTable1(這將永遠被調用一次 - 不管什麼)和persistTable2調用(將被調用0到n次)成一個事務,這樣如果任何持續/合併失敗,那麼一切都會回滾?

持久性/更新代碼正在使用JPA EntityManager。

+0

您使用容器管理事務嗎?這可能有助於[鏈接](https://docs.oracle.com/javaee/5/tutorial/doc/bncij.html) – Thevenin

+0

基本上只是將代碼放入具有活動事務的方法中。 – Thevenin

+0

@Thevenin - 是的,容器管理(TomEE)。我還應該提到這發生在一個REST風格的Web服務調用中(澤西島)。這很重要嗎? –

回答

0

您可以在方法調用方中使用事務性上下文。

@Transactional(propagation = Propagation.REQUIRES_NEW)

+0

這不適用於我的項目,因爲它是容器管理,不使用Spring。 –