2015-05-05 9 views
7

Also gibt es dieses Verhalten mit innodb, das ein Problem verursachen kann, wenn einige Tabellen Primärschlüssel fehlt.Angeben eines Primärschlüssels für @ElementCollection

Also mit Hibernate, suche ich nach einem Schlüssel, um einen Primärschlüssel in einer @ElementCollection-Tabelle mit einem Set als Underling-Datenstruktur anzugeben.

Ich habe einen Weg gefunden, einen Primärschlüssel mit einer Karte zu haben, aber es ist irgendwie seltsam, weil ich keine Karte brauche.

Ich habe auch eine Antwort zu @Embeddable gefunden, aber ich brauche diese Art von Komplexitäten nicht. Ich verwende ein Set oder Set als Datenstruktur in meinen Entitäten.

Irgendeine Idee, wie man das erreicht?

+0

Verwenden Sie eine @ ManyTo * -ähnliche Beziehung: Wenn Sie einen Primärschlüssel haben, haben Sie eine neue Entität. –

+1

Es ist irgendwie ärgerlich, eine neue Entity nur für eine Menge int zu erstellen. – plcstpierre

Antwort

8

Wenn Sie ein Set verwenden und das Element Column nicht null ist, erstellt Hibernate einen Primärschlüssel mit der Join-Spalte und der Elementspalte.

+1

Gute, einfache Lösung. Arbeitete für mich. –

+2

Not null muss mit @Column (nullable = false) und ohne @NotNull Annotation gesetzt werden. @Column (nullable = false) wird für die Angabe von Datenbankschemadetails verwendet. Weitere Informationen finden Sie unter [@NotNull vs @Column (nullable = false)] (https://Stackoverflow.com/a/7439544/1997088) – Black

2

@ElementCollection kann keinen Primärschlüssel annehmen, da Embeddable Typen keine Kennung haben können.

Sie können add an @OrderColumn optimieren die generierten SQL-Anweisungen. Wenn Sie einen Primärschlüssel benötigen, sollten Sie die @ElementCollection in eine @OneToMany Zuordnung umwandeln.

+0

Haben Sie eine Referenz dafür? – plcstpierre

+0

Der Artikel, den ich in der Antwort verlinkt habe, ist ein guter Ausgangspunkt. Dann müssen Sie das Schema manuell erstellen, um das PK zu erstellen, da Hibernate PK nur für Entitäten unterstützt. –

+0

Hoppla. Es ist kein Problem der Leistung, aber mit der MySQL-Replikation, also glaube ich nicht, dass @OrderColumn mich retten wird. Meine eigentliche Frage war: Haben Sie eine Referenz für die Beschränkung des Winterschlafs? – plcstpierre