Java Spring中出现异常时事务回滚
我正在学习Spring,在Spring的交易中遇到了一些麻烦 这是我的密码Java Spring中出现异常时事务回滚,java,spring,transactions,commit,rollback,Java,Spring,Transactions,Commit,Rollback,我正在学习Spring,在Spring的交易中遇到了一些麻烦 这是我的密码 @Transactional(rollbackFor = Exception.class) public void createGroupStudent(Student A,Student B,String nameGroup){ try{ //create Group createGroup(nameGroup); //createMember c
@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事务
非常感谢如果任何方法抛出
异常
,事务将回滚。但是没有一个方法抛出异常。在catch块中重新显示异常
,它将起作用。请检查文档中的注释。如果您使用的是hibernate,请考虑这种情况
当重新生成成员时。保存(A、B);执行时,hibernate会话尚未刷新会话(即,执行保存sql)util createMember()完成。当hibernate实际刷新并执行save sql时,就会发生该错误。这就是为什么您可能无法捕获导致事务回滚的异常
下面是一个可能有用的链接
谢谢。但当我发现任何异常时。事务仍然回滚吗?我不明白@。你是如何检查事务是否回滚的?可能是事务未提交。检查您的配置。我认为,尽管方法createMember()在保存到数据库时有问题(这里我使用的是函数“saveAndFlush()”)。我知道这一点,我抓住了这个例外。Prarent transaction createGroupStudent()认为自己没有问题并提交事务。但当再次提交时,方法createMember()将中断并引发异常。我认为方法createGroup()不会回滚。但实际上,该函数是回滚的,所有事务都是回滚的?发生了什么事。这是我的问题:(.我正在使用atomikos Transaction,您会遇到什么异常?能否将“传播”设置为“必需”,然后重试?