2016-04-27 3 views
0

Ich habe eine Frage über Hibernate ManyToMany-Zuordnungen. Ich habe zwei Klassen A und B und die Zuordnung zwischen ihnen ist eine ManyToMany Mapping von Hibernate aufgelöst:Verwenden von Viele-zu-Viele-Junction-Tabelle in einer anderen Beziehung

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

    @Id 
    @GeneratedValue 
    private Long id; 

    @ManyToMany 
    @JoinTable(name="A_B", [email protected](name="A_id"), [email protected](name="B_id")) 
    private Set Bs; 
} 

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

    @Id 
    @GeneratedValue 
    private Long id; 

    @ManyToMany(mappedBy="b") 
    private Set As; 
} 

Die Fremdschlüssel auf Benutzer und Gruppen sind „A_Id“ und „B_id“. Join Tabelle heißt A_B.

Jetzt möchte ich hinzufügen C. Ich möchte A_B hat eine Beziehung mit C, erstellen eine Viele-zu-viele Beziehung mit C und A_B, die ich A_B_C nennen kann.

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

    @Id 
    @GeneratedValue 
    private Long id; 

    @ManyToMany 
    @JoinTable(name="A_B", [email protected](name="C_id"), [email protected](name="?????")) 
    private Set A_Bs; // Don't have any UserGroup entity ! 
} 

EDIT: Also werde ich A_B Einheit, mit 2 @OneToMany Beziehung für A und B und A_B erstellen.

Frage: Was ist die beste Lösung für A_B über Primärschlüssel? Eingebetteter Primärschlüssel oder generierte ID? Ich möchte kein Duplikat haben (user_id, group_id):/Nur Unique constraint ist genug?

Was ist mit A_B < -> C Beziehung? Brauche keine Entität A_B_C Ich denke, und @ManyToMany wäre genug ...

Ich würde jede Hilfe zu schätzen wissen.

Vielen Dank!

+1

, wenn Sie eine Beziehung haben wollen, eine Benutzergruppe Einheit USERGROUP- dann erstellen (und haben 1-N Benutzer-Usergroup und 1- N Gruppe-Benutzergruppe). Sie können eine Join-Tabelle, die für eine andere Relation verwendet wird, nicht bastardisieren. –

+0

Wenn ich also Entity UserGroup (A_B now) hinzufüge, kann ich die @ManyToMany-Beziehung mit C herstellen, aber auf A_B brauche ich eine generierte Id oder EmbeddedId? – Guillaume

+0

Sie benötigen eine ID für eine Entität. Ob das eine ID ist, die aus User.id und Group.id (mit IdClass) oder EmbeddedId (mit diesen 2 Feldern) gebildet wird, oder ob Sie eine separate ID nur für diese Objekte haben möchten, liegt an Ihnen. –

Antwort

0

Ich glaube, Sie keinen Verein User in Group müssen, weil der Group ein etwas wie Wörterbuch ist.

@Entity 
@Table(name = "users") 
public class User { 

    @Id 
    @GeneratedValue 
    private Long id; 

    @ManyToMany 
    @JoinTable(name = "users_groups") 
    private Set<Group> groups; 

} 

@Entity 
@Table(name="groups") 
public class Group { 

    @Id 
    @GeneratedValue 
    private Long id; 

} 

Und Sie brauchen eine @ManyToMany Verein Group in Newsletter

@Entity 
@Table(name="newsletters") 
public class Newsletter { 

    @Id 
    @GeneratedValue 
    private Long id; 

    @ManyToMany 
    @JoinTable(name="newsletters_groups") 
    private Set<Group> groups; 
} 
+0

Nun, ich wusste, dass ich meinen Tisch A, B und C angerufen hätte, mein Beispiel ist schlecht ... Aber vom funktionalen Standpunkt aus hat man Recht, es ist besser;) – Guillaume

Verwandte Themen