[英]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.REQUIRED
和rollobackFor = Throwable.class
,但是當事務在第二個saveSubEntity
調用失敗時,將saveSubEntity
第一個subEntity
。
也許問題在於Hibernate無法為save方法打開事務。
假設如果Hibernate沒有為save方法創建任何事務,則由於其Propagation.REQUIRED,每個saveSubEntity調用都將處於不同的事務中。 結果,每個saveSubEntity調用的更改都將提交給數據庫。
為了檢查交易是否為保存方法或沒有建立,你可以幫我卸下saveSubEnitty方法Tranactional注解。 如果沒有為保存方法創建事務,您將看到一個錯誤。
顯然,此問題是由於Spring注入錯誤而產生的,因為服務沒有在啟動時實例化,從而導致注釋無法正常工作。 感謝您的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.