首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring transaction propagation_required问题

Spring transaction propagation_required问题
EN

Stack Overflow用户
提问于 2012-05-20 23:27:59
回答 1查看 1.8K关注 0票数 3

在我们的java项目中,我们使用了带有hibernate和spring的ORM。我在删除持久化对象时遇到了问题。例如,此示例方法按ids获取实体,然后删除它们:

代码语言:javascript
复制
@Transactional
public void remove(List<Long> ids) {
    SearchTemplate template = new SearchTemplate();
    template.addParameter("milestoneId",ids);
    List <InvoiceQueue> items = this.findByCriteria(template);
    ...
    this.delete(items);
}

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

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

有人能解释为什么它不能与默认的传播类型PROPAGATION_REQUIRED一起工作吗?

提前谢谢。

环境详细信息:

hibernate.version 3.5.5-最终版,spring.version 3.0.5.RELEASE

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-22 15:58:50

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

检查您的日志以了解是什么导致事务回滚,请注意,即使是像NoResultException这样的简单SELECT -query失败也会导致事务回滚,除非您在@Transactional-annotation中明确声明在某些异常情况下不回滚。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10674731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档