Rozdiel medzi @JoinColumn a mappedBy

1. Úvod

Vzťahy JPA môžu byť jednosmerné alebo obojsmerné. Znamená to jednoducho, že ich môžeme modelovať ako atribút presne na jednu z pridružených entít alebo na obidve.

Definovanie smeru vzťahu medzi entitami nemá žiadny vplyv na mapovanie databázy. Definuje iba smery, ktorými tento vzťah používame v našom doménovom modeli.

Pre obojsmerný vzťah zvyčajne definujeme:

  • vlastniaca strana
  • inverzná alebo referenčná strana

The @JoinColumn anotácia nám pomáha určiť stĺpec, ktorý použijeme na pripojenie k združeniu entít alebo kolekcii prvkov. Na druhej strane mappedBy atribút sa používa na definovanie strany vzťahu (strana, ktorá nevlastní) vzťahu.

V tomto rýchlom návode sa pozrieme na rozdiel medzi @JoinColumn a mappedByv JPA. Predstavíme tiež, ako ich používať v združení one-to-many.

2. Počiatočné nastavenie

Ak budeme v tejto príručke pokračovať, povedzme, že máme dve entity: Zamestnanec a Email.

Je zrejmé, že zamestnanec môže mať viac e-mailových adries. Daná e-mailová adresa však môže patriť presne jednému zamestnancovi.

Znamená to, že zdieľajú združenie one-to-many:

Aj v našom modeli RDBMS budeme mať cudzí kľúč zamestnanecké ID v našom Email subjekt odkazujúci na id atribút Zamestnanec.

3. @JoinColumn Anotácia

Vo vzťahu dvojstranný / mnohostranný strana, ktorá je vlastníkom, je obvykle definovaná na „veľa strana vzťahu. Je to zvyčajne strana, ktorá vlastní cudzí kľúč.

The @JoinColumn anotácia definuje, že skutočné fyzické mapovanie na strane odovzdávajúcej:

@Entity public class Email {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @ManyToOne (fetch = FetchType.LAZY) @JoinColumn (name = "employee_id") súkromný zamestnanec; // ...}

Znamená to jednoducho, že naše Email entita bude mať pomenovaný stĺpec cudzieho kľúča zamestnanecké ID s odkazom na primárny atribút id nášho Zamestnanec subjekt.

4. mappedBy Atribút

Len čo sme definovali vlastnú stránku vzťahu, Hibernate už má všetky informácie, ktoré potrebuje na zmapovanie tohto vzťahu v našej databáze. Aby bolo toto združenie obojsmerné, musíme iba definovať stranu odkazov. Inverzná alebo referenčná strana sa jednoducho mapujú na stranu, ktorá je vlastníkom.

Môžeme ľahko použiť mappedBy atribút @OneToMany anotácia. Poďme si teda definovať našu Zamestnanec subjekt:

@Entity public class Employee {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @OneToMany (fetch = FetchType.LAZY, mappedBy = "zamestnanec") súkromné ​​zoznamy e-mailov; // ...}

Tu, hodnota mappedBy je názov atribútu mapovania asociácií na strane, ktorá je vlastníkom. Týmto sme teraz vytvorili obojsmerné spojenie medzi našimi Zamestnanec a Email subjekty.

5. Záver

V tomto návode sme sa pozreli na rozdiel medzi @JoinColumn a mappedBy a ako ich použiť v obojsmernom vzťahu jeden na viac.

The @JoinColumn anotácia definuje skutočné fyzické mapovanie na strane, ktorá ho vlastní. Na druhej strane je referenčná strana definovaná pomocou mappedBy atribút @OneToMany anotácia.

Ako obvykle je zdrojový kód k dispozícii na serveri Github.


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