java - PSQLException:错误:重复键值违反唯一约束
问题描述
我有两个实体:User
和Video
.
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
实体不只属于一个用户。
解决方案
在您的表favourite_videos
中,主键是favourite_id
. 所以在这种情况下,不能有另一个元组在favourite_id
以前的元组中使用过。(一个元组是一个记录(一行))
您可以通过将 和 组合为主键来创建复合主键来避免此user_id
问题favourite_id
。
推荐阅读
- groovy - 提取 groovy jar
- gcc - 构建 JOGL 在 c.build.nativewindow.awt 期间出现 gcc 错误:jawt.dll:文件无法识别:文件格式无法识别
- powerbi - Power BI 服务上的奇怪行为:视觉级别筛选器仅在特定页面上自动重置为“全部”
- html - 如何在 Angular Using API 中获取特定 Id 的值(CRUD In Angular Using API)
- c - 在循环中将整数作为字符串附加到 char[]
- javafx - 在 javafx 的场景生成器中未显示 css 样式
- javascript - 不使用 endsWith() 确认字符串的结尾
- javascript - 为什么 unhandledrejection 事件无法捕获 React 中的一些错误?
- loops - 我想写一个数字,然后做一个运算(如果N是偶数,那么N/2,或者如果N是奇数,那么(N*3)+1),直到新的数字等于1
- ms-access - 如何在 Access 报告中将日期显示为文本