2016-05-12 18 views
2

2つのエンティティ、エンティティNodeおよびエンティティClusterがあります。 Clusterには、多くの場合、Nodeがあります。 Nodeは複数のClusterに属することができます。したがってClusterには@ManyToMany注釈があります。ただし、NodeClusterには属していません(意図的)。JPA ManyToMany一方向関係

私はClusterを削除すると、私はそれが持っていた(将来的には、私は別のClusterにそれらのNode Sを追加する場合があります)すべてのNode Sを維持したいです。だから私はは必要ありませんCascade.DELETE。しかし、Nodeを削除すると、それに属するClusterのすべてを更新する必要があります(Nodeは削除されます)。

JPAを使用してこれを処理する最善の方法は何ですか?

答えて

2

NodeClusterに属していないためです。

双方向関係を使用する場合は、リンクを更新する側をNodeClusterの間で選択する必要があります。あなたのビジネスの観点から最も重要なエンティティを選択します...関連を保存するには、関係の所有エンティティを保存する必要があります。

あなたがbidirectionnal関係したくない場合は、あなたがNode自体を削除する前に、すべてのCluster.nodesからNodeを削除する必要があります...一方向の関係で実際に

+0

うん、それが双方向作らなければなりませんでした。 –

2

、あなたは関係のホルダーエンティティを指定することができます`Clusterクラスの@ManyToManyアノテーションのjoinColumn="clusterId"プロパティを使用します。

これはあなたのコードがどうあるべきかです:

@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 
} 

さらに読書のために見てみてください。

Hibernate @ManyToMany Unidirectional and Bidirectional

関連する問題