JPA @Embedded a @Embeddable

1. Prehľad

V tomto tutoriále uvidíme, ako môžeme mapovať jednu entitu, ktorá obsahuje vložené vlastnosti, na jednu databázovú tabuľku.

Na tento účel teda použijeme @Embeddable a @ Zabudované anotácie poskytované rozhraním Java Persistence API (JPA).

2. Kontext údajového modelu

Najskôr si definujme tabuľku s názvom spoločnosti.

The spoločnosti Táto tabuľka bude obsahovať základné informácie, ako je názov spoločnosti, adresa a telefón, ako aj informácie o kontaktnej osobe:

public class Company {private Integer id; súkromné ​​meno reťazca; súkromná adresa reťazca; súkromný telefón String; private String contactFirstName; private String contactLastName; súkromný reťazec contactPhone; // štandardné getre, setre}

Zdá sa však, že kontaktná osoba by mala byť vyčlenená do samostatnej triedy. Problém je v tom nechceme pre tieto podrobnosti vytvoriť samostatnú tabuľku. Pozrime sa teda, čo môžeme urobiť.

3. @Embeddable

JPA poskytuje @Embeddable anotácia, ktorá deklaruje, že trieda bude vložená inými entitami.

Poďme definovať triedu, aby sme abstrahovali od podrobností kontaktnej osoby:

@Embeddable verejná trieda ContactPerson {private String firstName; private String priezvisko; súkromný telefón String; // štandardné getre, setre}

4. @Vložené

Anotácia Spoločného parlamentného zhromaždenia @ Zabudované sa používa na vloženie typu do inej entity.

Poďme ďalej upraviť naše Spoločnosť trieda. Pridáme anotácie JPA a tiež zmeníme použitie Kontaktná osoba namiesto samostatných polí:

@Entity public class Company {@Id @GeneratedValue private Integer id; súkromné ​​meno reťazca; súkromná adresa reťazca; súkromný telefón String; @Vložený súkromný ContactPerson contactPerson; // štandardné getre, setre}

Vďaka tomu máme svoju entitu Spoločnosť, vloženie podrobností kontaktnej osoby a mapovanie do jednej databázovej tabuľky.

Stále však máme ešte jeden problém, a to je ako bude JPA mapovať tieto polia do stĺpcov databázy.

5. Prepísanie atribútov

Ide o to, že naše polia sa nazývali veci ako contactFirstName v našom origináli Spoločnosť trieda a teraz krstné meno v našom Kontaktná osoba trieda. Takže SPS ich bude chcieť zmapovať contact_first_name a krstné meno, resp.

Okrem toho, že to nie je ideálne, v skutočnosti nás zlomí s našou duplikáciou telefón stĺpec.

Môžeme teda použiť @AttributeOverrides a @AttibuteOverride prepísať vlastnosti stĺpca nášho vloženého typu.

Pridajme to k Kontaktná osoba pole v našom Spoločnosť subjekt:

@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;

Pretože tieto anotácie idú do poľa, môžeme mať rôzne prepísania pre každú obklopujúcu entitu.

6. Záver

V tomto tutoriáli sme nakonfigurovali entitu s niektorými vloženými atribútmi a namapovali sme ich na rovnakú databázovú tabuľku ako priložená entita. Na to sme použili @ Zabudované, @Embeddable, @AttributeOverrides a @AttributeOverride anotácie poskytované rozhraním Java Persistence API.

Zdrojový kód príkladu je ako vždy k dispozícii na serveri GitHub.


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