首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JPA Hibernate多对多级联

JPA Hibernate多对多级联
EN

Stack Overflow用户
提问于 2011-02-08 23:42:21
回答 4查看 68.2K关注 0票数 64

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

代码语言:javascript
复制
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连接表中删除,但用户本身不会从用户表中删除。

使用上面的代码,当我删除一个组时,只有GROUP表中的行会被删除,而用户在USER_GROUP join表中仍然有一个到被删除组的条目。

如果我将cascade放在User类中,如下所示:

代码语言:javascript
复制
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "USER_GROUP",
joinColumns =
{
    @JoinColumn(name = "GROUP_ID")
},
inverseJoinColumns =
{
    @JoinColumn(name = "USER_ID")
})
private Set<Group> groupList;

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-09 00:23:05

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

JoinTable映射从User更改为Group,并将groupList属性设置为User,使其具有mappedBy属性。这会将组更改为关系的管理端,并对组进行持久化/更新调用来管理连接表。

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

票数 45
EN

Stack Overflow用户

发布于 2011-02-18 16:36:48

如前所述,如果您不需要从用户端进行级联,则将组所有者设置为关系的所有者。

然后,尝试使用cascade=CascadeType.MERGE在删除组时不删除级联用户。

票数 6
EN

Stack Overflow用户

发布于 2011-08-02 05:37:56

从另一个角度看问题:

您可以将FK约束添加到多对多映射表。实际上,出于数据完整性的原因,你应该在你的数据库中总是有FK。例如,在这种情况下,至少不能删除用户,同时在映射表中静默地保留孤立行。

当您有FK时,您可以在约束上指定on delete cascade referential action,DB将管理映射表的自动删除,而不是您要求的实体的自动删除。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4935095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档