Sammensatte primære nøgler i JPA

1. Introduktion

I denne vejledning lærer vi om sammensatte primære nøgler og de tilsvarende kommentarer i JPA.

2. Sammensatte primære nøgler

En sammensat primærnøgle - også kaldet en sammensat nøgle - er en kombination af to eller flere kolonner for at danne en primær nøgle til en tabel.

I JPA har vi to muligheder for at definere de sammensatte taster: @IdClass og @EmbeddedId kommentarer.

For at definere de sammensatte primære nøgler skal vi følge nogle regler:

  • Den sammensatte primære nøgleklasse skal være offentlig
  • Det skal have en no-arg konstruktør
  • Det skal definere lige med() og hashCode () metoder
  • Det må være Skan genoprettes

3. Den IdClass Kommentar

Lad os sige, at vi har et bord kaldet Konto og den har to kolonner - kontoNummer, kontoType - der danner den sammensatte nøgle. Nu skal vi kortlægge det i JPA.

I henhold til JPA-specifikationen, lad os oprette en Konto-id klasse med disse primære nøglefelter:

offentlig klasse AccountId implementerer Serializable {private String accountNumber; privat String accountType; // standard konstruktør public AccountId (String accountNumber, String accountType) {this.accountNumber = accountNumber; this.accountType = accountType; } // er lig med () og hashCode ()}

Lad os derefter forbinde Konto-id klasse med enheden Konto.

For at gøre det skal vi kommentere enheden med @IdClass kommentar. Vi skal også erklære felterne fra Konto-id klasse i enheden Konto og kommentere dem med @Id:

@Entity @IdClass (AccountId.class) offentlig klasse konto {@Id privat String accountNumber; @Id privat String accountType; // andre felter, getters og setter}

4. Den EmbeddedId Kommentar

@EmbeddedId er et alternativ til @IdClass kommentar.

Lad os overveje et andet eksempel, hvor vi skal vedvare nogle oplysninger om en Bestil med titel og Sprog som de primære nøglefelter.

I dette tilfælde er den primære nøgleklasse, BookId, skal kommenteres med @Embeddable:

@Embeddable public class BookId implementerer Serialiserbar {privat strengetitel; private String sprog; // standard konstruktør offentlig BookId (streng titel, streng sprog) {this.title = titel; dette.sprog = sprog; } // getters, equals () og hashCode () metoder}

Så er vi nødt til at integrere denne klasse i Bogså enhed, der bruger @EmbeddedId:

@Entity public class Book {@EmbeddedId private BookId bookId; // konstruktører, andre felter, getters og setters}

5. @IdClass vs. @EmbeddedId

Som vi lige så, er forskellen på overfladen mellem disse to den med @IdClass, vi var nødt til at specificere kolonnerne to gange - en gang i Konto-id og igen i Konto. Men med @EmbeddedId det gjorde vi ikke.

Der er dog nogle andre afvejninger.

For eksempel påvirker disse forskellige strukturer de JPQL-forespørgsler, vi skriver.

For eksempel med @IdClass, forespørgslen er lidt enklere:

VÆLG konto.accountNumber FRA konto-konto

Med @EmbeddedId, vi er nødt til at gøre en ekstra gennemgang:

VÆLG book.bookId.title FROM Book book

Også, @IdClass kan være ret nyttigt steder, hvor vibruger en sammensat nøgleklasse, som vi ikke kan ændre.

Endelig, hvis vi får adgang til dele af den sammensatte nøgle individuelt, kan vi gøre brug af @IdClass, men på steder, hvor vi ofte bruger den komplette identifikator som et objekt, @EmbeddedId foretrækkes.

6. Konklusion

I denne hurtige artikel udforsker vi sammensatte primære nøgler i JPA.

Som altid kan den komplette kode til denne artikel findes på Github.


$config[zx-auto] not found$config[zx-overlay] not found