Heim > Java > javaLernprogramm > Wie ordne ich zusammengesetzte Schlüssel in JPA und Hibernate mithilfe von @EmbeddedId vs. @IdClass zu?

Wie ordne ich zusammengesetzte Schlüssel in JPA und Hibernate mithilfe von @EmbeddedId vs. @IdClass zu?

Linda Hamilton
Freigeben: 2024-12-05 03:24:17
Original
522 Leute haben es durchsucht

How to Map Composite Keys in JPA and Hibernate using @EmbeddedId vs. @IdClass?

Zusammengesetzte Schlüssel mit JPA und Hibernate zuordnen

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.

Verwendung von @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 {
    // ...
}
Nach dem Login kopieren

Hier ist TimePK eine separate Klasse, die einen Konstruktor ohne Argumente, Getter/Setter für die Primärschlüsselfelder und equal( ) und hashCode()-Methoden.

Verwendung von @EmbeddedId

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;
    // ...
}
Nach dem Login kopieren

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.

Unterschiede zwischen @IdClass und @EmbeddedId

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.

Referenzen

  • JPA 1.0-Spezifikation:

    • Abschnitt 2.1.4 „Primärschlüssel und Entitätsidentität“
    • Abschnitt 9.1.14 „EmbeddedId Anmerkung“
    • Abschnitt 9.1.15 „IdClass-Anmerkung“

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage