例如,我在休眠中有一个用户实体,其中包含以下两个字段:
@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'"
错误。
Table in MySQL workbench
似乎want_to_match_id不允许重复。如何解决这个问题?
我也认为用户参考本身很不好,但是我不知道该怎么做。
答案 0 :(得分:0)
您正在使用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
但是您对该列有唯一的键约束,不允许该条目引起问题。您应该考虑重新设计表结构以更好地反映您的需求。