spring-事务服务中的ConstraintViolationException不回滚

我有一个名为add()的服务方法,该方法带有@Transactional注释.

我称之为它,但是当ConstraintViolationException发生在相应的DAO方法内时,即使我指定不这样做,它也会回滚事务.

我期望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.

解决方法:

啊,我明白了. ConstraintViolationException在方法执行后的提交时发生,当add()方法周围的事务拦截器尝试提交事务时.由于无法提交,因此显然事务已回滚.它无能为力.

上一篇:java-使用Spring框架以原子方式维护服务层事务和数据库日志记录


下一篇:设计原则笔记