Jam*_* P. 10 java many-to-many jpa
我有实体:
@Entity
public class User {
@ManyToMany(cascade=CascadeType.PERSIST, fetch=FetchType.EAGER)
private List<Role> roles = new ArrayList<Role>();
Run Code Online (Sandbox Code Playgroud)
@Entity
public class Role {
@ManyToMany(cascade=CascadeType.PERSIST, fetch=FetchType.EAGER)
private Set<Permission> permissions = new HashSet<Permission>();
Run Code Online (Sandbox Code Playgroud)
执行删除/删除时,抛出以下异常:
Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`user_role`, CONSTRAINT `FK_USER_ROLE_roles_ID` FOREIGN KEY (`roles_ID`) REFERENCES `role` (`ID`))
Run Code Online (Sandbox Code Playgroud)
生成的连接表和外键似乎存在问题.
如何解决这个问题,以便删除一个角色?
编辑:
导出的SQL显示如下:
CREATE TABLE IF NOT EXISTS `user_role` (
`User_ID` bigint(20) NOT NULL,
`roles_ID` bigint(20) NOT NULL,
PRIMARY KEY (`User_ID`,`roles_ID`),
KEY `FK_USER_ROLE_roles_ID` (`roles_ID`)
)
Run Code Online (Sandbox Code Playgroud)
想想JPA如何解决多对多关系.
我猜它会创建包含用户和角色的引用(外键)的表User,表Role和表user_role.
现在,如果要删除角色,则必须删除用户持有的此角色的所有引用.为此,您必须迭代具有此类角色的所有用户,并将其从此用户的角色列表中删除.然后,您可以安全地删除该角色.
BTW一旦你解决了这个问题,你可能会有下一个问题Permission.所以,如果我是你,我会暂时删除该permissions字段,Role使角色删除工作,然后恢复permissions到唯一的新问题,如果存在.
| 归档时间: |
|
| 查看次数: |
14706 次 |
| 最近记录: |