JPA @Embedded And @Embeddable

1. Oversikt

I denne veiledningen ser vi hvordan vi kan kartlegge en enhet som inneholder innebygde egenskaper til en enkelt databasetabell.

Så, for dette formålet, bruker vi @Embeddable og @En del av merknader gitt av Java Persistence API (JPA).

2. Datamodellkontekst

La oss først definere en tabell som heter selskap.

De selskap tabellen vil lagre grunnleggende informasjon som firmanavn, adresse og telefon, samt informasjon om en kontaktperson:

offentlig klasse Company {private Integer id; privat strengnavn; privat strengadresse; privat String telefon; privat streng kontaktFørstnavn; privat streng kontaktLastName; privat streng kontakt telefon; // standard getters, setters}

Kontaktpersonen virker imidlertid som om den skal trekkes ut til en egen klasse. Problemet er at vi ønsker ikke å lage en egen tabell for disse detaljene. Så la oss se hva vi kan gjøre.

3. @Embeddable

JPA sørger for @Embeddable kommentar for å erklære at en klasse vil bli innebygd av andre enheter.

La oss definere en klasse for å trekke ut kontaktpersonopplysningene:

@ Embeddable public class ContactPerson {private String firstName; privat streng etternavn; privat String telefon; // standard getters, setters}

4. @En del av

JPA-merknaden @En del av brukes til å bygge inn en type i en annen enhet.

La oss deretter endre vår Selskap klasse. Vi legger til JPA-kommentarene, og vi endrer også til bruk Kontaktperson i stedet for separate felt:

@Entity public class Company {@Id @GeneratedValue private Integer id; privat strengnavn; privat strengadresse; privat String telefon; @Embedded privat ContactPerson contactPerson; // standard getters, setters}

Som et resultat har vi vår enhet Selskap, legge inn kontaktpersondetaljer og kartlegge til en enkelt databasetabell.

Vi har fortsatt et problem til, skjønt, og det er hvordan JPA skal kartlegge disse feltene til databasekolonner.

5. Attributter tilsidesetter

Saken er at feltene våre ble kalt ting som contactFirstName i vår original Selskap klasse og nå fornavn i vår Kontaktperson klasse. Så, JPA vil ønske å kartlegge disse til contact_first_name og fornavn, henholdsvis.

Bortsett fra å være mindre enn ideell, vil det faktisk ødelegge oss med vårt nå dupliserte telefonen kolonne.

Så, vi kan bruke @AttributeOverrides og @AttibuteOverride for å overstyre kolonneegenskapene til den innebygde typen.

La oss legge dette til Kontaktperson felt i vårt Selskap enhet:

@Embedded @AttributeOverrides ({@AttributeOverride (name = "firstName", column = @Column (name = "contact_first_name")), @AttributeOverride (name = "lastName", column = @Column (name = "contact_last_name")), @AttributeOverride (name = "phone", column = @Column (name = "contact_phone"))}) private ContactPerson contactPerson;

Vær oppmerksom på at siden disse kommentarene går på feltet, kan vi ha forskjellige overstyringer for hver inngående enhet.

6. Konklusjon

I denne opplæringen har vi konfigurert en enhet med noen innebygde attributter og tilordnet dem til samme databasetabell som den vedlagte enheten. Til det brukte vi @En del av, @Embeddable, @AttributeOverrides og @AttributeOverride merknader gitt av Java Persistence API.

Som alltid er kildekoden til eksemplet tilgjengelig på GitHub.


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