2016-05-12 1 views
2

Sagen wir, wir haben zwei Entitäten, Entität Node und Entität Cluster. A Cluster hat viele Node s. A Node kann zu mehreren Cluster gehören. Also in Cluster gibt es eine @ManyToMany Annotation. Jedoch ist Node keine Cluster es gehört (vorsätzlich).JPA ManyToMany unidirektionale Beziehung

Wenn ich ein Cluster löschen Ich möchte die Node s all halten (Zukunft ich zu einem anderen Cluster diese Node s kostenlos in) hatte es. So brauche ich nichtCascade.DELETE. Aber wenn ich ein Node lösche, sollte das Cluster, das es gehörte, aktualisiert werden (das Node wird von ihnen entfernt).

Was ist der beste Weg, um dies mit JPA zu behandeln?

Antwort

2

Das ist, weil Node nichts von Cluster kennt, zu dem es gehört. Wenn Sie eine bidirektionale Beziehung verwenden, müssen Sie auswählen, welche Seite die Verknüpfungen zwischen Node und Cluster aktualisieren soll. Wählen Sie die Entität aus, die für Ihr Unternehmen am wichtigsten ist. Um die Zuordnung zu speichern, müssen Sie die Eigentümereinheit der Beziehung speichern.

Wenn Sie nicht Richtungsunempfindlicher Beziehung wollen, müssen Sie die Node von allen Cluster.nodes entfernen, bevor die Node Löschen selbst ...

+0

Ja hatte es bidirektional gemacht. –

2

In der Tat in einer unidirektionalen Beziehung, können Sie die Halter-Einheit der Beziehung angeben Verwenden joinColumn="clusterId" Eigenschaft in der @ManyToMany Annotation in der `Cluster-Klasse.

Dies ist, wie Ihr Code sein sollte:

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

Für weitere Lesung nehmen Sie bitte einen Blick auf:

Hibernate @ManyToMany Unidirectional and Bidirectional

Verwandte Themen