Java 在子方法-Spring中引发异常时,事务未回滚
我有一个方法服务方法-SampleServiceImpl()。 我已声明服务方法如下:Java 在子方法-Spring中引发异常时,事务未回滚,java,spring,spring-mvc,jdbc,Java,Spring,Spring Mvc,Jdbc,我有一个方法服务方法-SampleServiceImpl()。 我已声明服务方法如下: @Transactional @Override public sampleDTO SampleServiceImpl(SampleDTO sampleDTO) throws SampleException, ParseException { // Method call to methodA. createDataA(sampleDTO); // Method call to metho
@Transactional
@Override
public sampleDTO SampleServiceImpl(SampleDTO sampleDTO) throws SampleException, ParseException {
// Method call to methodA.
createDataA(sampleDTO);
// Method call to methodB.
createDataB(sampleDTO);
return sampleDTO ;
}
这里创建了DataA,它不会引发任何异常。
但是在DataB中,我们尝试基于DataA创建DataB。由于某些逻辑,我们无法创建数据。因此,我们抛出一个示例异常,如:
count = checkIfDataBExisting(sampleDTO);
if(count == 1){
throw new SampleException(ErrorConstants.DATA_B_EXISTING);
}
但问题是,在createDataA(sampleDTO)方法调用期间提交的事务不会回滚
为什么这实际上不起作用?我对这种行为有点困惑
编辑:1
createData1(sampleDTO)方法-
EDIT2:
样本例外声明-
默认情况下,声明性事务仅针对运行时异常回滚。 SampleException必须是RuntimeException才能回滚事务 您的方法签名:
public sampleDTO sampleservicecimpl(sampleDTO sampleDTO)抛出SampleException、ParseException
让我觉得SampleException是一个选中的异常
有关@Transactional
,请参见:
如果没有与异常相关的规则,它将被视为DefaultTransactionAttribute(在RuntimeException和Error上回滚,但在选中的异常上不回滚)
您可以创建
SampleException
extendsRuntimeException
或设置@Transactional
的rollboor
属性,是否可以粘贴方法createDataA
?显示createDataA
方法,您是否在默认情况下将自动提交设置为false?@Andronicus-我已为您的引用重新创建了createDataA()方法。您使用的数据库和表类型是否支持事务?如果您使用的是MySQL,请确保不要使用MyISAM表,因为它们不支持事务。@M.Deinum Yes DB支持事务。我在这里使用oracle。我还添加了SampleException声明。我也尝试过将rollback属性设置为SampleException.class,比如-->rollboor=SampleException.class,但它不起作用。
private ADTO createDataA(SampleDTO sampleDTO) throws SampleException{
ADTO aDTO = null;
try {
//CREATE NEW WORK DRIVER
aDTO = createNewDataA(sampleDTO);
//Other arbitary database transactions occurs after creation of AData.
} catch (SampleException exc) {
SampleException newException = new SampleException (exc.getExceptionObject().getExceptionCode(), exc);
throw newException ;
}
return aDTO;
}
public class SampleException extends Exception{
//Definitions and Declarations.
}