gpt4 book ai didi

java - 事务方法回滚内的 Hibernate 事务方法调用

转载 作者:行者123 更新时间:2023-12-01 04:41:14 24 4
gpt4 key购买 nike

我正在尝试创建一个事务方法,该方法调用其他几个事务方法以保存一些相互依赖的数据库实体。如果任何调用失败,我希望事务完全回滚。然而,这不是观察到的行为。这是我的代码:

@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< 处失败时 调用,第一个 subEntity 被提交。

最佳答案

也许问题是 Hibernate 无法为 save 方法打开事务。

假设如果 Hibernate 没有为 save 方法创建任何事务,则每个 saveSubEntity 调用将由于其 Propagation.REQUIRED 而处于不同的事务中。因此,每个 saveSubEntity 调用的更改都将提交到数据库。

要检查是否为 save 方法创建了交易,请帮我删除 saveSubEnitty 方法上的 Tranactional 注释。如果没有为 save 方法创建事务,您将看到错误。

关于java - 事务方法回滚内的 Hibernate 事务方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16487114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com