簡體   English   中英

事務處理方法回滾中的休眠事務處理方法調用

[英]Hibernate transactional method call within transactional method rollback

我試圖創建一個事務方法,該方法調用其他幾個事務方法,以節省一些相互依賴的數據庫實體。 如果任何呼叫失敗,我希望事務完全回滾。 但是,這不是觀察到的行為。 這是我的代碼:

@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public void save(EntityToBeSaved entity) {
    try{
            for(SubEntity sub: entity.getSubEntities()) //specifics omitted
                  saveSubEntity(sub); //this is transactional
    }
    catch (DataIntegrityViolationException e){
        throw new BusinessException("Duplicate Name");
    }
}

saveSubEntity還具有Propagation.REQUIREDrollobackFor = Throwable.class ,但是當事務在第二個saveSubEntity調用失敗時,將saveSubEntity第一個subEntity

也許問題在於Hibernate無法為save方法打開事務。

假設如果Hibernate沒有為save方法創建任何事務,則由於其Propagation.REQUIRED,每個saveSubEntity調用都將處於不同的事務中。 結果,每個saveSubEntity調用的更改都將提交給數據庫。

為了檢查交易是否為保存方法或沒有建立,你可以幫我卸下saveSubEnitty方法Tranactional注解。 如果沒有為保存方法創建事務,您將看到一個錯誤。

顯然,此問題是由於Spring注入錯誤而產生的,因為服務沒有在啟動時實例化,從而導致注釋無法正常工作。 感謝您的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM