java - 如何处理 JPA 唯一约束违规?

标签 java exception jpa exception-handling constraints

当违反唯一约束时,会抛出 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/

相关文章:

java - 重新启动应用程序刽子手

java - 使用 java 从 Dataproc 读取谷歌云存储时出现 NoSuchMethodError

java - 解析 JSON 时出错,但代码看起来没问题

java - JPA - 语法错误解析 SELECT GREATEST(c.field, mc.field), LEAST(c.field, mc.field) FROM table

java - 用JPA实现分层数据结构(固定深度)

java - 无法使 Eclipselink 2 级缓存工作

java - 如何在 Java 中使用 printf 格式化多行 toString()

java - Spring ThreadPoolExecutor Factory Bean工厂bean的使用方法

java - 您如何断言在 JUnit 测试中引发了某个异常?

java - 如果在java中第一次失败则执行服务器调用