JPA ManyToMany单向关系

dum*_*nal 7 hibernate jpa hibernate-mapping spring-data

可以说我们有两个实体Entity Node和Entity Cluster。A Cluster有很多Node。一个Node可以属于多个Cluster。因此,Cluster其中有一个@ManyToMany注释。但是Node不知道Cluster它属于哪个(有意)。

当我删除a时,Cluster我想保留它所有的Nodes(将来我可以将它们添加Node到另一个s中Cluster)。所以我不需要 Cascade.DELETE。但是,如果删除a NodeCluster则应更新所有它所属的对象(Node将从中删除它们)。

使用JPA处理此问题的最佳方法是什么?

Gui*_*ume 7

那是因为Node不知道Cluster它属于什么。

如果使用双向关系,则必须选择哪一侧将更新Node和之间的链接Cluster。选择对您的业务而言最重要的实体...要保存关联,您需要保存关系的拥有实体。

如果您不想要双向关系,则需要在删除自身之前Node从全部中Cluster.nodes删除Node...


cнŝ*_*ŝdk 6

实际上,在单向关系中,您可以使用`Cluster 类joinColumn="clusterId"中的@ManyToMany注释中的属性指定关系的持有者实体。

这是您的代码应该如何:

@Entity
@Table(name="Cluster")
public class Cluster {

    //Id and properties

    @ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(name="Cluster_Nodes", 
                joinColumns={@JoinColumn(name="clusterId")}, 
                inverseJoinColumns={@JoinColumn(name="nodeId")})
    private Set<Node> nodes = new HashSet<Node>();

    // Getter and Setter methods
}
Run Code Online (Sandbox Code Playgroud)

如需进一步阅读,请查看:

休眠@ManyToMany 单向和双向

  • 我真的很想在来到 Stack 之前阅读文档,但有时很难找到。所以我很喜欢找到这样一个评论,既容易理解又带来官方文档或者好的文章。谢谢你! (3认同)