当我尝试在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;
删除了没有例外的角色。 但我认为它可以在没有角色映射的情况下工作。
答案 0 :(得分:0)
您需要确定“多对多”中哪一方拥有该关系,或者确保在删除关联的Role
对象之前更改双方。
如评论中所述,您可以通过在关系的任一侧添加mappedBy
属性来暗示所有权。通过向mappedBy="roles"
实体添加Role
,这将告诉持久性提供程序该关系由User
对象的roles
属性管理,从而操纵使用其连接表映射的关系。