2014-10-16 115 views
2

我在我的資源中有批量創建用戶的方法。 我使用@UnitOfWork註釋了我的資源方法,但是我對此操作的具體服務方法也進行了註釋,因爲只有部分用戶保存時的情況對我來說是okey。Dropwizard嵌套事務

總結我有主事務,並且許多嵌套事務需要單獨保存用戶。

我注意到當我的資源方法沒有用@UnitOfWork和我的服務BulkSave方法進行註釋時,dropwizard無法開始事務。從邏輯的角度來看,這應該工作,但不工作。

我嘗試使用@UnitOfWork設置刷新模式,首先將FlushMode設置爲手動,這幾乎是完美的。當嵌套事務回滾時,主事務可以被提交,這是很好的解決方案。 但是這個解決方案並沒有我想象的那麼好。使用級聯保存相關實體不起作用!

最後,我有相關的實體,其不保存,或在主交易錯誤時,嵌套事務回滾是(發生異常後不要衝洗會議)

人有類似的情況或瞭解更多關於會議Dropwizard中的管理?

回答

2

@UnitOfWork僅註冊爲資源方法。所以註釋你的服務方法是行不通的。

相反,你在你的資源的方法設置:

@UnitOfWork(transactional = false) 

因此,在一個單一的交易,整個方法不包裹起來,但你仍然從UnitOfWork得到休眠Session。然後在您的DAO方法中,手動控制交易:

Transaction transaction = currentSession().beginTransaction(); 
    try { 
     // do some transactions 
     transaction.commit(); 
    } catch (Exception e) { 
     transaction.rollback(); 
     throw new RuntimeException(e); 
    }