由于MySQLIntegrityConstraintViolation异常,我不打算在表列中插入重复条目。防止hibernate向mysql表中添加唯一索引
我有一个如下表结构: -
CREATE TABLE USER_ROLES (
USER_ID BIGINT NOT NULL,
ROLE_ID BIGINT NOT NULL,
KEY USER (USER_ID),
KEY ROLE (ROLE_ID),
CONSTRAINT pk_user_roles PRIMARY KEY (USER_ID, ROLE_ID),
CONSTRAINT fk_users_user_roles FOREIGN KEY (USER_ID) REFERENCES USERS (ID) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_roles_user_roles FOREIGN KEY (ROLE_ID) REFERENCES ROLES (ID) ON DELETE CASCADE ON UPDATE CASCADE
) COLLATE='utf8_general_ci' ENGINE=InnoDB;
我具有以下在上表2点的行。
2行表的创建和insetion后右表上的索引为: -
show index from user_roles;
在这个阶段,下面的INSERT语句可与另外3日排成一排。
insert into user_roles values (1, 2);
当通过休眠完成时,相同插入失败。 我有一个spring mvc应用程序,其中包含具有以下映射的User.java和Role.java域类。
@Table(name="USERS")
public class User {
@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_roles",
joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id")}
)
private Set<Role> roles;
}
@Entity
@Table(name = "ROLES")
public class Role {
@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_roles",
joinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")}
)
private Set<User> users;
}
当我开始了我的Spring MVC应用程序,然后查询此表的索引数据库,它提供了以下的输出: -
show index from user_roles;
上面插入查询(插入user_roles values(1,2))通过应用程序执行失败时出现错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '2' for key 'UK_5q4rc4fh1on6567qk69uesvyf'
我不能在USER_ID和ROLE_ID列中添加重复条目。 请指点我正确的方向。谢谢
取决于你想要达到可能你愿意在为'USER_ROLES'重复的条目是什么:同一用户可以有多个角色相关联。在这种情况下,你应该使用多对多的关系,而不是一对多关系。 – Paizo
谢谢Paizo。是的,这正是我想要实现的;用户可以有多个角色。我尝试了多对多的关系,并且按预期工作。请发表评论作为答案,以便我可以接受它。 – ivish
已被其他人拍摄XD – Paizo