我正在嘗試創建一個事務性方法,該方法調用其他幾種事務性方法以保存一些相互依賴的數據庫實體。如果任何呼叫失敗,我希望事務完全回滾。但是,這不是觀察到的行爲。這裏是我的代碼:事務性方法回滾中的Hibernate事務方法調用
@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
調用失敗,第一subEntity
將提交。
非常令人驚訝。你能顯示'saveSubEntity()'的代碼嗎?另外,readOnly = false和propagation = REQUIRED是默認值。您可以刪除這些屬性。 – 2013-05-10 17:01:11