gpt4 book ai didi

mysql - 为什么 @JoinTable(name ="user_role") 不允许多个 user_id 和 role_id

转载 作者:行者123 更新时间:2023-11-29 21:21:13 25 4
gpt4 key购买 nike

我正在使用 springboot 和 hibernate,

我的实体类如下所示:

@Entity
@Table(name="tbl_user")
public class User {

@Id @GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="user_Id")
private long userId;

@Column(name="userName")
private String userName;

@Column(name="passWord")
private String passWord;

@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name="user_role")

private Collection<Role> roleList;

我的第二个实体如下所示:

@Entity
@Table(name="tbl_role")
public class Role {

@Id @GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="role_Id")
private long roleId;

@Column(name="roleName")
private String roleName;

当我插入第一个角色为 manager(pkid=1), admin(pkid=2) 的用户时,它成功了,但是当我尝试插入第二个用户的角色为 Manager*pkid 时=1, admin(pkid=2, serviceUser(pkid=3) 它不允许我插入第二个用户,但有以下异常

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '2' for key 'UK_ixctfj5iq0enl7iktlpo7wxct'

有人可以帮助我为什么在生成表时会创建此约束,我如何将第二个用户插入数据库?

最佳答案

如果您在 role_list 上使用 OnetoMany,则实际上是在说单个 User 将指向多个 Roles并且一个Role将仅指向一个User。这将通过在连接表上放置的唯一键约束来强制执行。如果您打印了 SQL 语句,您将在创建模式时看到它。大致如下:

alter table user_role add constraint UK_ixctfj5iq0enl7iktlpo7wxct unique (role_id)

在您的要求中,您还有一个由许多用户使用的角色。您的管理员角色主键是2,并且您希望能够将其分配给多个用户。您的关系是 role_list 的ManyToMany

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name="user_role")
private Collection<Role> roleList;

当您更改注释时,您仍然会有一个连接表,但不会添加任何约束。

关于mysql - 为什么 @JoinTable(name ="user_role") 不允许多个 user_id 和 role_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35710753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com