java - 具有 OneToMany 关系的休眠重复条目
问题描述
例如,我在休眠中有一个用户实体,其中包含以下 2 个字段:
@Entity
@Table(name = "user")
public class User {
@OneToMany(fetch = FetchType.LAZY)
@JsonIgnore
private Set<User> addedUsers;
@OneToMany(fetch = FetchType.LAZY)
@JsonIgnore
private Set<User> wantToAdd;
}
addedUsers
适用于同意彼此匹配的 2 个人,而wantToAdd
适用于向另一个用户发送好友请求但尚未收到回复的用户。
这是我使用的一系列查询:(假设有 3 个用户 a、b、c)
a add b -> good
a add c -> good
b add c -> failed
现在它给出了
"java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'UK_4l1fmdm138stci88r2ht2ggff'"
错误。
MySQL 工作台中的表
似乎 want_to_match_id 不允许重复。如何解决这个问题?
我也认为这不利于用户引用自身,但我不知道我该怎么做。
解决方案
您正在使用该列want_to_match_id
将用户 ID 与与该人匹配的用户 ID 匹配。但是您已经在want_to_match_id
导致问题的列上添加了唯一键约束。当您将唯一键约束添加到此列时,这意味着您无法将相同的用户 ID 匹配到多个人。假设我有一个人 A 的用户 ID 1 并且必须将它与人 B 和人 C 的用户 ID 2 和 3 匹配。但我也想将 Person B 与 Person C 匹配,因此表格条目最终看起来像(根据有问题的详细信息):
user_id | want_to_match_id
1 2
1 3
2 3
但是您在列上有一个唯一键约束,不允许此条目导致问题。您应该考虑重新设计表结构以更好地反映您的要求。
推荐阅读
- r - 错误; pthread_create() 的返回码是 22
- python - Python 函数类和 __init__
- java - 如何在 getter 方法中将 Date 对象转换为 LocalDateTime?
- r - 为什么 [^ -~] 和 [^\\u0000-\\u007f] 匹配不同?
- internet-explorer - 是否有使用 VBScript 使用 IE 打开新的 Ikognito 选项卡的命令?
- c++ - 为什么 Intellisense with Emscripten 找不到 SDL2/SDL.h 的包含路径?
- c - 如何将两个字符串连接到第三个字符串,但在特殊位置,偶数和奇数?
- wso2 - Cannot configure X509 Certificate Authenticator with deployment.toml
- google-sheets - How do I have a hyperlink in one cell specific to a dropdown option?
- javascript - How to show particular Text Lines in Italic format in the TextArea Tag in SAP Fiori Apps?