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!
, 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. –
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
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. –