gpt4 book ai didi

Spring事务propagation_required问题

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

在我们的 java 项目中,我们将 ORM 与 hibernate 和 spring 一起使用。我在删除持久对象时遇到了问题。例如,此示例方法通过 ID 获取实体,然后删除它们:

@Transactional
public void remove(List<Long> ids) {
SearchTemplate template = new SearchTemplate();
template.addParameter("milestoneId",ids);
List <InvoiceQueue> items = this.findByCriteria(template);
...
this.delete(items);
}

方法执行正常,没有任何异常,但实际上并没有从数据库中删除项目。

将以下注释添加到方法定义 @Transactional(propagation = Propagation.REQUIRES_NEW) 解决了问题。

谁能解释为什么它不适用于默认传播类型 PROPAGATION_REQUIRED。

提前致谢。

环境细节:

hibernate.version 3.5.5-Final, spring.version 3.0.5.RELEASE

最佳答案

真的只是重复@PeterBagyinszki 在他的评论中所说的内容,但原因很可能是由于其他部分抛出异常而回滚了发生删除的事务,并且事务期间所做的所有更改都被取消了.使用 Propagation.REQUIRES_NEW,删除是在它自己单独的嵌套事务中完成的。嵌套事务的结果(提交或回滚)不会影响“外部”事务,反之亦然。

检查您的日志以查看导致事务回滚的原因,请注意,即使像简单的 SELECT 查询失败并出现类似 NoResultException 的问题也会导致事务回滚,除非您在 中明确声明@Transactional-注释它不回滚某些异常。

关于Spring事务propagation_required问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10674731/

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