我有一個名爲add()
的服務方法,它使用@Transactional
註解。事務服務中的ConstraintViolationException沒有回滾
我把它稱爲它,但是當相應的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上升並且事務回滾! –