当违反唯一约束时,将引发javax.persistence.RollbackException。但是引发RollbackException可能有多种原因。我如何才能发现违反了唯一约束?

try {
    repository.save(article);
}
catch(javax.persistence.RollbackException e) {
    // how to find out the reason for the rollback exception?
}

最佳答案



异常是链接在一起的,您必须递归调用getCause()以获得提供程序特定的异常(并且可能会转到SQLException),以将其转换为应用程序可以很好地为用户处理的内容。下面将打印异常链:

for (t = e.getCause(); t != null; t = t.getCause()) {
    logger.debug("Exception:" + t);
}

对于异常处理和“翻译”,您可以执行类似于Spring的操作(请参阅各种JpaDialect类,例如 HibernateJpaDialect 以了解概念)。

所有这些都不是很好,此代码将不可移植,并且查找导致冲突的属性不是一件容易的事。这以某种方式确认没有elegant and portable way to handle constraint violations in JPA

关于java - 如何处理JPA唯一约束违规?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3502279/

10-13 01:34