Ich habe zwei JPA-Entitäten (Client, InstrumentTraded) erstellt, die Hibernate als Provider mit einer ManyToMany-Beziehung verwenden. Nachdem Hibernate die Tabellen für MySQL generiert hat, scheint die ManyToMany-Beziehungstabelle keine Primärschlüssel für die beiden Fremdschlüssel zu enthalten. Dies ermöglicht doppelte Datensätze in der Viele-zu-Viele-Tabelle, was nicht das gewünschte Ergebnis ist.
Generierte Tabellen:
%Vor%Bevorzugte Tabelle:
%Vor%Entitäten:
%Vor% Nach einigen Nachforschungen sieht es so aus, als ob die einzige Lösung darin besteht, eine Join-Tabelle mit zusätzlichen Spalten zuzuordnen Verwenden Sie @OneToMany
@IdClass
und eine zusammengesetzte Primärschlüsselklasse, wenn ich keine zusätzlichen Spalten benötige. Ist dies die einzige Lösung neben der, die ich in den obigen Code aufgenommen habe, die @UniqueConstraint
mit den zwei Fremdschlüsselspalten im @ManyToMany
Mapping verwendet? Es scheint ein bisschen lächerlich, wie viel Arbeit für ein solches Szenario nötig ist. Danke!
Ich hatte ein ähnliches Problem. Alles, was ich getan habe, war, dass ich den Sammlertyp von Liste zu Menge geändert habe:
%Vor%bis
%Vor%Und irgendwie erzeugt Hibernate jetzt Primärschlüssel für die Join-Tabelle.
Ihre Zuordnung sieht ungerade aus (insbesondere der joinColumn
-Teil der @JoinTable
Annotation). Ich würde so etwas erwarten:
Aber wenn Sie die Standardeinstellungen nicht überschreiben wollen (und ich nehme an, Sie tun das), würde ich einfach die @JoinTable
überspringen.
Oder Teilen Sie Ihre @ManyToMany in die @OneToMany - @ManyToOne-Beziehung. Siehe hier wie Sie diese Zuordnung durchführen können
Tags und Links jpa hibernate primary-key many-to-many foreign-keys