PSQLException:错误:重复键值违反唯一约束

时间:2018-06-04 19:18:54

标签: java postgresql spring-boot

我有两个实体:VideoUser

@Column(name = "favourite") @ElementCollection(targetClass = Video.class, fetch = FetchType.EAGER) @CollectionTable(name = "favourite_videos", joinColumns = @JoinColumn(name = "user_id")) private Set<Video> favourite; 有这样的字段:

user

user可以将视频添加到他的收藏中。 但是,当另一个video尝试添加已由另一个 user添加的org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "uk_4ai4388fdjwvno9jj7u9x1h9x". Key (favourite_id)=(17) already exists. 时,会发生错误:

Video

在数据库中它看起来像:

enter image description here

我的意思是具有其他ID的用户无法添加ID为17和18的视频,或者已由其他用户添加的任何其他视频ID。问题是如何确保用户可以添加其他用户已有的视频?我希望 DatabaseReference pickupRef = FirebaseDatabase.getInstance().getReference(AppConstants.PICK_UP_REF); pickupRef.keepSynced(true); 实体不属于一个用户。

1 个答案:

答案 0 :(得分:2)

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

您可以通过将user_idfavourite_id组合作为主键来制作复合主键来避免此问题。