事务服务中的ConstraintViolationException没有回滚

时间:2012-12-08 12:57:11

标签: spring rollback transactional

我有一个名为add()的服务方法,注明了@Transactional

我调用它但是当在相应的DAO方法中发生ConstraintViolationException时,即使我指定不执行,它也会回滚事务。

我希望抓住ConstraintViolationException,而不是NotFoundException检查异常将被抛出。

@Override
@Transactional(noRollbackFor = ConstraintViolationException.class)
public User add(User user) throws NotFoundException {
    try {
        result = userDao.add(user);
    } catch (RuntimeException e) {
        throw new NotFoundException("Couldn't find group");
    }
}

有没有办法在没有事务回滚的情况下捕获ConstraintViolationException

我使用的是Spring 3.1.1和hibernate 3.6。

1 个答案:

答案 0 :(得分:4)

啊,我看到会发生什么。 ConstraintViolationException在提交时,在执行方法之后,当add()方法周围的事务拦截器尝试提交事务时发生。由于它无法提交,显然,事务是回滚的。它不能做任何其他事情。