Im bereitgestellten Code wird ein zusammengesetzter Schlüssel für die Time-Tabelle mit levelStation und confPathID als Komponenten definiert. Um diesen zusammengesetzten Schlüssel in JPA und Hibernate zuzuordnen, haben Sie zwei Möglichkeiten: @EmbeddedId und @IdClass.
Mit der @IdClass-Annotation können Sie mehrere Felder der Entität zuordnen bilden den zusammengesetzten Primärschlüssel. Dies erfordert die Definition einer Klasse, die den Primärschlüssel darstellt. In diesem Fall kann die TimePK-Klasse wie folgt definiert werden:
@IdClass(TimePK.class) public class Time implements Serializable { // ... }
Hier ist TimePK eine separate Klasse, die einen Konstruktor ohne Argumente, Getter/Setter für die Primärschlüsselfelder und equal( ) und hashCode()-Methoden.
Die @EmbeddedId-Annotationskarten eine eingebettete Klasse in den Primärschlüssel der Entität. Im Gegensatz zu @IdClass kombiniert dieser Ansatz die Entitätsklasse und die Primärschlüsselklasse. So würden Sie @EmbeddedId verwenden:
@Entity class Time implements Serializable { @EmbeddedId private TimePK timePK; // ... }
In diesem Fall ist TimePK eine innere Klasse der Time-Entität und muss außerdem einen Konstruktor ohne Argumente, Getter/Setter für die Schlüsselfelder und Gleichheiten definieren ()- und hashCode()-Methoden.
Der Hauptunterschied zwischen @IdClass und @EmbeddedId ist ihre Auswirkung auf die Abfragesyntax. Mit @IdClass würden Sie direkt über die Entität auf das Primärschlüsselfeld zugreifen, während Sie mit @EmbeddedId über einen Getter der eingebetteten Klasse darauf zugreifen würden.
Bei der Wahl zwischen den beiden vermittelt @EmbeddedId die Tatsache dass der Primärschlüssel eine sinnvolle Identität in Ihrem Domänenmodell hat, während @IdClass vorschlägt, dass der Primärschlüssel einfach eine Kombination von Feldern ist, die das eindeutig identifiziert Entität.
JPA 1.0-Spezifikation:
Das obige ist der detaillierte Inhalt vonWie ordne ich zusammengesetzte Schlüssel in JPA und Hibernate mithilfe von @EmbeddedId vs. @IdClass zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!