交易中存储了哪些数据?

What data is stored in transaction?

哪些数据存储在@Transactional 服务中,尤其是在事务中?如果我有控制器布局、服务布局、daos 和数据库——为什么我必须使用带有@Transactional 注释的服务以及这些布局之间存储了哪些数据? 例如,我发送了一些对象数据并希望将其写入数据库。那么,在交易中将存储所有这些数据吗?但是,如果我只通过提供对象的 ID 来更新数据库中的一些数据怎么办? 你能帮我理解一下吗?

这与事务中存储的数据无关。它是关于 运行 一笔交易中的一些操作。

假设您创建了银行系统,并且您有进行汇款的方法。假设您要将金额从账户 A 转移到账户 B

您可以在控制器中尝试类似的操作:

//Controller method
{
//...
accountA.setValue(accountA.getValue() - amount);
accountService.update(accountA);

accountB.setValue(accountB.getValue() + amount);
accountService.update(accountB);
}

但是这种方法有一些严重的问题。即,如果 accountA 的更新操作成功但 accountB 的更新操作失败怎么办?钱会消失。一个账号丢了,第二个账号没拿到。

这就是为什么我们应该在服务方法中的一个事务中进行这两个操作,如下所示:

//This time in Controller we just call service method
accountService.transferMoney(accountA, accountB, amount)

//Service method
@Transactional
public void transferMoney(Account from, Account to, amount)
{
   from.setValue(from.getValue() - amount);
   accountRepository.update(from);

   to.setValue(to.getValue() + amount);
   accountRepository.update(to);
}

此方法带有@Transactional 标记,这意味着任何失败都会导致整个操作回滚到之前的状态。因此,如果其中一个更新失败,将回滚对数据库的其他操作。