我正在使用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:键'UK_ixctfj5iq0enl7iktlpo7wxct'的条目'2'重复
有人可以帮我为什么在生成表时会创建此约束吗,如何将第二个用户插入数据库?
最佳答案
如果在OnetoMany
上使用role_list
,则实际上是在说一个User
将指向许多Roles
,而Role
将仅指向一个User
。这将通过unique
上的join table
键约束来强制执行。如果已打印出SQL语句,则在创建schema
时将看到它。类似于以下内容:
alter table user_role add constraint UK_ixctfj5iq0enl7iktlpo7wxct unique (role_id)
根据您的要求,您还可以有一个由许多
Role
使用的单个Users
。您的管理员角色primary key
是2,并且您希望能够将其分配给多个用户。您的关系是role_list的ManyToMany
。@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name="user_role")
private Collection<Role> roleList;
更改批注时,您仍将具有
join table
,但不会添加任何约束。