2017-03-02 73 views
0

我有一個非常奇怪的要求,我必須在2個表(審計表)插入記錄,如果插入一個特定的表成功。這裏我不是在聽者中談論@PreInsert,因爲聽衆總是在同一個交易中被調用。我知道這可以通過在第一次保存成功後簡單地調用「save」方法來手動完成。但是我想知道是否有其他方式可以使用Listener,比如JPA/EclipseLink/String-data,這樣未來的應用程序開發人員不會被迫手動將數據插入到審計表中。調用方法發佈事務提交

基本上我在尋找@PostCommit類型的功能。請幫幫我。

回答

0

我相信你最終要回調到當前事務的邊界內運行,你只是希望它運行後休眠已經做了的事情,就像休眠Envers工作。

要做到這一點,你基本上需要註冊一個事件動作隊列回調如下所示:

session.getActionQueue().registerProcess(
    new BeforeTransactionCompletionProcess() { 
    @Override 
    public void doBeforeTransactionCompletion(SessionImplementor session) { 
     // do whatever you want with the session here. 
    } 
    } 
); 

如果你最終必須運行代碼交易,你可以做同樣的事情:

session.getActionQueue().registerProcess(
    new AfterTransactionCompletionProcess() { 
    @Override 
    public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor session) { 
     // do whatever you want with the session here. 
    } 
    } 
); 

這應該讓你去任何一種方式。

相關問題