Hibernate很多很多关系与级联删除

时间:2016-10-18 13:44:49

标签: hibernate jpa

我需要实现基于角色的身份验证。场景就像,

角色拥有多项/多项权利。 相反, 权利可以分配给多个角色。

所以,这里团队设计了三个表名,

1)角色(列:roleId,name,desc)

2)右(列:rightId,name,desc)

3)RoleRightAssociation(列:roleId,rightId,assignedDate,assignedBy)

第三个表存储数据,如

在特定日期,用户“X”已将“A”分配给角色“B”。

UseCase 是,  删除角色时,必须删除与该角色对应的RoleRightAssociation中的所有条目(删除级联)。但不是来自右表。

我为此创建了三个实体并给出了关系, 职责:

 @OneToMany(mappedBy="roleRoghtId.roleId",cascade=CascadeType.ALL)
  private List<RoleRight> roleRightsList=new ArrayList<RoleRight>();

右:

@OneToMany(mappedBy="roleRoghtId.rightId",cascade=CascadeType.ALL)
   private List<RoleRight> roleRightsList;

RoleRightAssociation:

     @Entity
     @Table(name = "RoleRight")
     @AssociationOverrides({ 
     @AssociationOverride(name = "roleRoghtId.roleId",joinColumns = @JoinColumn(name = "roleId")),
     @AssociationOverride(name = "roleRoghtId.rightId",joinColumns = @JoinColumn(name = "rightId")) })
public class RoleRightAssociation {
...
   @EmbeddedId
    private PrimaryKeyRoleRight roleRoghtId=new PrimaryKeyRoleRight();

...
}

PrimaryKeyRoleRight:

 @ManyToOne(cascade = CascadeType.ALL)
    private Role roleId;

    @ManyToOne(cascade = CascadeType.ALL)
    private Right rightId;

我无法满足给定的用例。 我需要在受尊重的JPA实体中应用哪些关系?

先谢谢。

1 个答案:

答案 0 :(得分:1)

Cascade.ALL不包含delete Orphan

您必须将orphanRemoval = true添加到roleRightsList实体中的Role