gpt4 book ai didi

java - Spring异常时事务回滚

转载 作者:行者123 更新时间:2023-11-30 08:02:38 25 4
gpt4 key购买 nike

我正在学习 Spring,我在 Spring 中遇到了一些事务问题。

这是我的代码

@Transactional(rollbackFor = Exception.class)
public void createGroupStudent(Student A,Student B,String nameGroup){
try{
//create Group
createGroup(nameGroup);
//createMember
createMember(A,B);
}catch(Exception e){
logger.error(e.getMessage());
}
}

@Transactional(rollbackFor = Exception.class)
public void createGroup(String nameGroup){
try{
repoGroup.save(nameGroup);
}catch(Exception e){
logger.error(e.getMessage());
}
}

@Transactional(rollbackFor = Exception.class)
public void createMember(Student A,Student B){
try{
// function will throw a kind of Exception involve to " error constraint sql oracle " .
//It's my intended
repoMember.save(A,B);
}catch(Exception e){
logger.error(e.getMessage());
}
}

问题是当函数 createMember() 抛出异常时,事务总是回滚,为什么?我不明白发生了什么事!我在每个方法中添加了 try、catch,但它没有用。

虽然方法 createMember() 在保存到数据库时遇到了问题(我在这里使用函数 saveAndFlush())。我知道它并且我捕获了那个异常。父事务createGroupStudent()认为自己没有问题,提交事务。但是当再次提交时,方法 createMember() 将中断并抛出异常。我认为方法 createGroup() 不会回滚。但实际上,那个函数回滚了,所有的交易都回滚了?发生了什么事?

我正在使用 atomikos 交易。

非常感谢

最佳答案

如果任何方法抛出Exception,事务将回滚。但是这些方法都没有抛出 Exception。在 catch block 中重新抛出 Exception,它将起作用。查看 Transactional 的文档注释。

关于java - Spring异常时事务回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36759599/

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