【发布时间】:2013-05-05 10:11:29
【问题描述】:
我正在尝试创建一个事务方法,该方法调用其他几个事务方法以保存一些相互依赖的数据库实体。如果任何调用失败,我希望事务完全回滚。然而,这不是观察到的行为。这是我的代码:
@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 是默认值。您可以删除这些属性。
标签: java spring hibernate annotations transactional