首页 > 解决方案 > PSQLException:错误:重复键值违反唯一约束

问题描述

我有两个实体:UserVideo.

User有这样的领域:

@Column(name = "favourite")
@ElementCollection(targetClass = Video.class, fetch = FetchType.EAGER)
@CollectionTable(name = "favourite_videos", joinColumns = @JoinColumn(name = "user_id"))
private Set<Video> favourite;

Auser可以将视频添加到他的收藏中。但是,当另一个user尝试添加另一个video已经添加的 a 时,会发生错误: user

org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "uk_4ai4388fdjwvno9jj7u9x1h9x".
Key (favourite_id)=(17) already exists.

在数据库中它看起来像:

在此处输入图像描述

我的意思是另一个 id 的用户不能添加 id 为 17 和 18 的视频,或者其他任何用户已经添加的视频 id。问题是如何确保用户可以添加其他用户已经拥有的视频?我希望Video实体不只属于一个用户。

标签: javapostgresqlspring-boot

解决方案


在您的表favourite_videos中,主键是favourite_id. 所以在这种情况下,不能有另一个元组在favourite_id以前的元组中使用过。(一个元组是一个记录(一行))

您可以通过将 和 组合为主键来创建复合主键来避免此user_id问题favourite_id


推荐阅读