【发布时间】:2012-12-08 12:57:11
【问题描述】:
我有一个名为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。
【问题讨论】:
-
您指定不应回滚 ConstraintViolationException。但是抛出的异常是 NotFoundException。由于它是一个检查异常,它不应该导致回滚默认情况下。但这一切都取决于您如何配置 Spring 事务管理器。
-
我想捕获ConstraintViolationException并抛出NotFoundException但是catch块没有捕获它,我认为它可能在到达catch块之前被代理捕获,所以ConstraintViolationException上升并且事务回滚!跨度>
标签: spring rollback transactional