gpt4 book ai didi

java - Spring 中事务的传播是不稳定的

转载 作者:行者123 更新时间:2023-11-29 04:51:04 25 4
gpt4 key购买 nike

我有一个使用事务服务的 Spring/Hibernate 应用程序,我对使用 NEW 传播时事务如何工作感到有点困惑:

@Transactional
method A()
|
|-loop for each element
|
|-@Transactional(propagation=Propagation.REQUIRES_NEW)
method B()
|-make some entity change and save()

如您所见,我有一个实体循环,每个实体都在一个具有新事务的单独方法中处理。请确认我的假设:

  1. 如果方法 B 中出现异常,则当方法 A 返回时,在此方法中所做的所有更改不应保存到 DB。
  2. 如果方法 B 中没有异常,那么在方法 B 中所做的更改将立即提交给 DB,即使存在由方法 A 引起的父事务也是如此。

最佳答案

If there is an exception in method B, then all changes that were done in this method should not be saved to DB when method A returns.

不,已经在方法 B 中提交的更改将保持提交状态。例如,如果您在循环中有 10 个步骤,并且在第 4 步发生异常,则将保存在第 1-3 步所做的更改。

If there is NO exception in method B, then changes made in method B are COMMITTED IMMEDIATELY to DB, even though there is a parent transaction caused by method A.

正是

附言。确保使用 Spring 调用 methodB(),而不仅仅是 Java 调用。最简单的方法是将 methodB() 放在另一个类中,与 methodA() 不同。另一种方法是使用@Resource 注释,但它看起来有点棘手。

关于java - Spring 中事务的传播是不稳定的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35389862/

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