当前位置: 首页 > 知识库问答 >
问题:

Java JPA处理具有唯一约束违反“create”

郦翰学
2023-03-14

我正在使用springboot和JPA(与Hibernate一起使用)。

我们可以假设在一个实体上我有一些唯一的约束(例如,以电子邮件作为约束的用户实体)。

当我将收到一个“创建”请求时,如果资源已经存在,我必须返回已经存在的资源的主键(例如ID,而不是电子邮件)。

最好的做法是什么?

我想避免2个查询(一个检查是否存在,一个创建),这可能吗?

共有1个答案

隆兴修
2023-03-14

JPA实际上并没有提供任何API来进行唯一的约束冲突分析。唯一约束冲突是一种低级数据库特定错误,通常只包含表和字段信息。只是没有足够的数据将其传播到业务级别(获取实体和id信息)。

我知道的最佳实践是手动检查是否已经存在具有这样字段值的实体。唯一约束当然应该仍然存在,只是在非常罕见的并发插入情况下。

例如,如果您使用Spring Data JPA,您可以通过以下存储库查询获得一个现有用户的id:

@Query("SELECT u.id FROM User u WHERE u.email = :email")
Long getUserIdByEmail(@Param("email") String email);
 类似资料:
  • 我有一个实体,比如说雇员 with字段名标记为唯一。 提前谢谢你

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

  • 问题内容: 当违反唯一约束时,将引发a。但是可能有多种原因抛出异常。我如何才能发现违反了唯一约束? 问题答案: 我如何才能发现违反了唯一约束? 异常是链接在一起的,您必须递归调用以获取提供程序特定的异常(并可能转到),以将其转换为应用程序可以很好地为用户处理的内容。下面将打印异常链: 对于异常处理和“翻译”,您可以执行类似于Spring的操作(请参阅各种类,例如,以获取想法)。 所有这些都不是很好

  • 以下是SQL部分,我在调试代码时出错: ORA-00001:唯一约束主键违反T_LIAV_AGENT_STATE_APPROVAL... 这是主键约束依赖的2列AV_NAME_ID,AV_STATE... 我没有重复的数据...你认为还有其他原因吗?

  • 我在创建应用程序时遇到了这个问题。因此,每当我添加第一条评论时,问题都不会出现,但当我第二次尝试时,我会收到此错误: 重复的键值违反了唯一约束“tripplanner_discussion_author_id_key”详细信息:键 (author_id)=(1) 已存在。 我试图把放到 models.py,但它根本没有帮助。 models.py views.py 更新 当我登录到另一个用户时,一个