ManyToMany Java + Hibernate + MySQL中的外键

时间:2017-02-03 15:02:56

标签: java hibernate foreign-keys mapping many-to-many

当我尝试在Hibernate的帮助下使用其id从角色表中删除Role时,它会发生异常:

 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`ewp`.`permissions`, CONSTRAINT `FK_sq51ihfrapwdr98uufenhcocg` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`))

Class User ... @NotNull @ManyToMany(fetch = FetchType.EAGER, targetEntity = Role.class) @JoinTable(name = "permissions", joinColumns = {@JoinColumn(name = "user_id")}, inverseJoinColumns = {@JoinColumn(name = "role_id")}) private Set<Role> roles; ...

Class Role ... @ManyToMany(fetch = FetchType.EAGER) private List<User> users; ...

当我添加到角色

@JoinTable(name = "permissions", joinColumns = {@JoinColumn(name = "role_id")}, inverseJoinColumns = {@JoinColumn(name = "user_id")}) private List<User> users;

删除了没有例外的角色。 但我认为它可以在没有角色映射的情况下工作。

1 个答案:

答案 0 :(得分:0)

您需要确定“多对多”中哪一方拥有该关系,或者确保在删除关联的Role对象之前更改双方。

如评论中所述,您可以通过在关系的任一侧添加mappedBy属性来暗示所有权。通过向mappedBy="roles"实体添加Role,这将告诉持久性提供程序该关系由User对象的roles属性管理,从而操纵使用其连接表映射的关系。