当我抛出异常时,带注释的方法Transactional不会回滚吗?

时间:2017-12-08 10:15:34

标签: java mysql spring hibernate transactions

我只想回滚内部方法中的内容。

在代码段下方:

@Test
public void TransactionsTest() {
    Declaration declaration = declarationRepos.findOne(2l);

    declaration.setCode("1004");
    declarationRepos.save(declaration);

    try {
        persist(declaration);
    } catch (NotEnoughInformationException e) {
        e.printStackTrace();
    }

    System.out.println(declaration);
}


@Transactional(rollbackFor = NotEnoughInformationException.class)
private void persist(Declaration declaration) throws NotEnoughInformationException {
    declaration.setCode("1005");
    declarationRepos.save(declaration);

    throwExcep();
}

public void throwExcep() throws NotEnoughInformationException {
    throw new NotEnoughInformationException();
}

NotEnoughInformationException扩展了Exception。

我希望在抛出异常时回滚persist方法,因此代码值必须为" 1004"。

但是没有发生任何事情,提交了非法行为,而且代码值是" 1005"。

其他,当我这样做时:

@Test
@Transactional(rollbackFor = NotEnoughInformationException.class)
public void TransactionsTest() {

它有效,但它不是我想要的。

提前致谢。

0 个答案:

没有答案