으로 주석 처리 된 add()
이라는 서비스 메소드가 있습니다.트랜잭션 서비스에서 ConstraintViolationException에 대한 롤백이 발생하지 않았습니다.
나는 그것을 호출하지만 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
을 잡는 방법이 있습니까?
스프링 3.1.1 및 최대 절전 모드 3.6을 사용하고 있습니다.
ConstraintViolationException에 대한 롤백이 없어야 함을 지정합니다. 그러나 Throw되는 예외는 NotFoundException입니다. 확인 된 예외이므로 기본적으로 롤백 *이 발생해서는 안됩니다. 그러나 모든 것은 Spring 트랜잭션 관리자를 어떻게 구성했는지에 달려있다. –
ConstraintViolationException을 잡아서 NotFoundException을 throw하려고하지만 catch 블록이 catch를 catch하지 않습니다. catch 블록에 도달하기 전에 프록시에 의해 catch 될 수 있으므로 ConstraintViolationException이 올라가고 트랜잭션 롤백이 발생합니다. –