.EntityExistsException:具有相同标识符值的其他对象已与会话

时间:2017-09-28 07:42:37

标签: java hibernate jpa ejb

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,遇到与上述相同的问题。

0 个答案:

没有答案