一尘不染

JPA Hibernate多对多级联

hibernate

我正在使用JPA 2.0并hibernate。我有一个用户类和一个组类,如下所示:

public class User implements Serializable {
    @Id
    @Column(name="USER_ID")
    private String userId;

    @ManyToMany
    @JoinTable(name = "USER_GROUP",
               joinColumns = {
                   @JoinColumn(name = "GROUP_ID")
               },
               inverseJoinColumns = {
                   @JoinColumn(name = "USER_ID")
               }
    )
    private Set<Group> groupList;

    //get set methods
}

public class Group
{
    @Id
    @Column(name="GROUP_ID")
    private String groupId;

    @ManyToMany(mappedBy="groupList")
    private Set<User> memberList;
    //get set methods
}

然后,我创建一个用户和组,然后将该用户分配给该组。

我要拥有的是删除组时(当然),该组将被删除,并且该组具有的所有用户-组关系将从USER_GROUP连接表中自动删除,但用户本身不会从USER表。

使用上面的代码,当我删除组时,只有GROUP表中的行将被删除,并且用户在USER_GROUP连接表中仍然具有已删除组的条目。

如果我像这样在User类中放置层叠:

@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "USER_GROUP",
joinColumns =
{
    @JoinColumn(name = "GROUP_ID")
},
inverseJoinColumns =
{
    @JoinColumn(name = "USER_ID")
})
private Set<Group> groupList;

当我删除组时,用户也将被删除!

有什么方法可以实现我想要的吗?


阅读 266

收藏
2020-06-20

共1个答案

一尘不染

映射的方式User是关系的管理方,因此它将负责更新联接表。

JoinTable映射从更改UserGroup,并设置的groupList属性,User使其具有mappedBy属性。这会将组更改为关系的管理方,并向该组进行持久性/更新调用以管理联接表。

但是请注意,您将不能简单地向用户添加组,保存用户并继续,而必须将用户添加到组并保存组以查看更改,但是希望有双向多对多关系,无论如何您将密切管理这种关系。

2020-06-20