当违反唯一约束时,将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查询,但没有看到创建新的其他查询,也没有在其他地方插入记录: 我错过了什么