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

Wie ordne ich zusammengesetzte Schlüssel in JPA und Hibernate mithilfe von „@EmbeddedId' und „@IdClass' effektiv zu?

Susan Sarandon
Freigeben: 2024-12-11 11:20:11
Original
326 Leute haben es durchsucht

How to Effectively Map Composite Keys in JPA and Hibernate using `@EmbeddedId` and `@IdClass`?

Zusammengesetzte Schlüssel mit JPA und Hibernate zuordnen

Beim Zuordnen von Entitäten zu Datenbanktabellen werden häufig Primärschlüssel verwendet, um Datensätze eindeutig zu identifizieren. Zusammengesetzte Schlüssel, die aus mehreren Spalten bestehen, werden häufig in älteren Datenbanksystemen verwendet. Sowohl JPA als auch Hibernate stellen Annotationen zur effektiven Handhabung zusammengesetzter Schlüssel bereit.

Verwendung von EmbeddedId

Die Annotation „EmbeddedId“ gibt an, dass eine Java-Klasse einen zusammengesetzten Primärschlüssel darstellt. Es ordnet die Klasse dem geclusterten Primärschlüssel der Tabelle zu. Die Klasse muss:

  • mit @Embeddable annotiert sein
  • öffentliche oder geschützte Eigenschaften definieren, die den Primärschlüsselspalten entsprechen
  • über einen öffentlichen Konstruktor verfügen, der Werte für alle annimmt Primärschlüsselspalten
  • Implementieren Sie die Methoden equal() und hashCode() für den Wert Gleichheit

Beispiel mit EmbeddedId

@Entity
public class Time {
    @EmbeddedId
    private TimePK timePK;

    private String src;
    private String dst;
    private Integer distance;
    private Integer price;
}

@Embeddable
public class TimePK {
    private Integer levelStation;
    private Integer confPathID;

    // Constructor, equals(), and hashCode() methods omitted for brevity
}
Nach dem Login kopieren

Verwendung von IdClass

Die IdClass-Annotation gibt an, dass mehrere Felder oder Eigenschaften einer Entitätsklasse bilden einen zusammengesetzten Primärschlüssel. Die Klasse muss:

  • Ein serialisierbares Objekt erweitern (z. B. java.io.Serializable)
  • Einen öffentlichen Konstruktor ohne Argumente haben
  • Öffentlich (oder geschützt) definieren , mit eigenschaftsbasiertem Zugriff) Felder oder Eigenschaften, die den Primärschlüsselspalten entsprechen
  • Implementieren Sie equal() und hashCode()-Methoden für Wertegleichheit

Beispiel mit IdClass

@Entity
@IdClass(TimePK.class)
public class Time {

    @Id
    private Integer levelStation;
    @Id
    private Integer confPathID;

    private String src;
    private String dst;
    private Integer distance;
    private Integer price;
}

public class TimePK implements Serializable {
    private Integer levelStation;
    private Integer confPathID;

    // Constructor, equals(), and hashCode() methods omitted for brevity
}
Nach dem Login kopieren

Auswahl zwischen EmbeddedId und IdClass

EmbeddedId erstellt eine separate Klasse für den zusammengesetzten Schlüssel, während IdClass die Entitätsklasse selbst zum Halten verwendet die Primärschlüsselfelder. EmbeddedId ist expliziter und schlägt eine sinnvolle Entität vor, während IdClass besser für Kombinationen von Feldern geeignet ist, die keine unabhängige Bedeutung haben.

Referenzen

  • JPA 1.0-Spezifikation: https://jcp.org/en/jsr/detail?id=220

    • Abschnitt 2.1.4: https://jspec.dev.java.net/nonav/javadoc/javax/persistence/doc-files/javax/persistence/spec/version-1_0-final.doc.html#section_2.1.4
    • Abschnitt 9.1.14: https://jspec.dev.java.net/nonav/javadoc/javax/persistence/doc-files/javax/persistence/spec/version-1_0-final.doc.html#section_9.1.14
    • Abschnitt 9.1.15: https://jspec.dev.java.net/nonav/javadoc/javax/persistence/doc-files/javax/persistence/spec/version-1_0-final.doc.html#section_9.1.15

Das obige ist der detaillierte Inhalt vonWie ordne ich zusammengesetzte Schlüssel in JPA und Hibernate mithilfe von „@EmbeddedId' und „@IdClass' effektiv 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