I have a scenario where
1) While creating a Role, I can add permissions
2) While creating a Permission, I can add Roles.
Data Model:
ROLE : ROLE_ID(PK), DESCRIPTION
PERMISSION: RESOURCE_ID(PK), DESCRIPTION
ROLE_PERMISSION: ROLE_ID, RESOURCE_ID, ALLOWED : PK is --> (ROLE_ID,RESOURCE_ID)
So I have following Uni-directional OneToMany relations in JPA:
class Role{
.......
@OneToMany(cascade = {CascadeType.ALL}, orphanRemoval = true)
@JoinColumn(name = "ROLE_ID")
private Set<RoleResourcePermBean> resourceAssociations = new HashSet<RoleResourcePermBean>();
}
class Permission{
.......
@OneToMany(cascade = {CascadeType.ALL},orphanRemoval = true)
@JoinColumn(name = "RESOURCE_ID")
private Set<RoleResourcePermBean> roleResourcePermLocal = new HashSet<RoleResourcePermBean>();
}
class RolePermission{
@Id
@Column(name = "ROLE")
private String role;
@Column(name = "ALLOWED")
private String allowed;
@Id
@Column(name = "RESOURCE_ID")
private Integer resourceId;
}
因此,在创建角色流时,我将RolePermission添加到Role bean并在Role bean上调用Persist。这触发了角色和权限的持久化(由于级联),因此得到了错误EntityExistsException。 与UPDATE ROLE流程相同的情况。 PERMISSION的情况也与创建和更新流程相同。
如果我删除任何bean(角色,权限)上的级联,则创建/更新可以工作,但不能在另一个bean中工作。 例如:如果我在Permission中删除级联,则创建/更新角色有效。但是在创建/更新权限时出现diff错误(因为级联不会发生),反之亦然。
你能在这里帮助我吗? 映射是否正确?我尝试使用双向@ManyToOne,遇到与上述相同的问题。