我使用的是spring-boot和JPA。我试图捕获未经检查的异常,例如(Constraint Violation)抛出事务。即使我添加了catch块,它也会在超出事务边界时抛出。
我用google搜索,发现可以通过事务回调来实现。我尝试下面的代码:仍然给出错误public class TransactionAspect extends TransactionSynchronizationAdapter {
@Before("@annotation(org.springframework.transaction.annotation.Transactional)")
public void registerTransactionSyncrhonization() {
TransactionSynchronizationManager.registerSynchronization(this);
}
@Override
public void afterCompletion(int status) {
// code
System.out.println(status);
}
}
请帮助我!!
答案 0 :(得分:3)
您需要手动刷新JPA实体管理器
try{
manager.flush();
}catch(ConstraintViolationException){}
。 @Transactional方面是围绕方法
调用并且您无法捕获此异常,因为它在调用方法后刷新。