我有一个名为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()方法周围的事务拦截器尝试提交事务时.由于无法提交,因此显然事务已回滚.它无能为力.