当违反唯一约束时,会抛出 javax.persistence.RollbackException
。但是抛出 RollbackException
可能有多种原因。如何发现违反了唯一约束?
try {
repository.save(article);
}
catch(javax.persistence.RollbackException e) {
// how to find out the reason for the rollback exception?
}
最佳答案
How can I find out that a unique constraint was violated?
异常是链式的,你必须递归调用 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/