当前位置: 首页 > 面试题库 >

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

岳华灿
2023-03-14
问题内容

当违反唯一约束时,将javax.persistence.RollbackException引发a。但是可能有多种原因抛出异常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以获取想法)。

所有这些都不是很好,此代码将不可移植,并且找出导致冲突的属性是不容易的。



 类似资料:
  • 我有一个实体,比如说雇员 with字段名标记为唯一。 提前谢谢你

  • 我正在使用springboot和JPA(与Hibernate一起使用)。 我们可以假设在一个实体上我有一些唯一的约束(例如,以电子邮件作为约束的用户实体)。 当我将收到一个“创建”请求时,如果资源已经存在,我必须返回已经存在的资源的主键(例如ID,而不是电子邮件)。 最好的做法是什么? 我想避免2个查询(一个检查是否存在,一个创建),这可能吗?

  • 我正试图插入数据库,但我在日志上看到了这样的消息: 我找到了这个查询以获取违反的密钥:

  • 我有一个Spring MVC应用程序,它使用Spring Data JPA作为我的JPA提供者来持久化Hibernate。我有一个数据库表,在列上有一个唯一的约束,因此为什么保存相应的实体可能会导致唯一的约束冲突。我想检测这是否发生在我的服务层中,以便我可以向用户呈现有意义的错误消息。以下是我的服务方法。 我的Spring Data JPA存储库看起来像这样: 现在,当发生唯一的约束冲突时,我得到

  • 在现有答案中搜索没有给出有效结果。这就是我找不到原因的错误。我有一个实体类< code>MeteoRecord和< code>DayDegree,定义如下: 所有实体都扩展< code>AbstractEntity类: 保存新的如下所示: 它会引发错误: “气象仓库”只是扩展了“”JPA存储库: 我激活了更多日志以查看SQL查询,但没有看到创建新的其他查询,也没有在其他地方插入记录: 我错过了什么