Razlika između @JoinColumn i mappedBy

1. Uvod

JPA odnosi mogu biti jednosmjerni ili dvosmjerni. To jednostavno znači da ih možemo modelirati kao atribut na točno jednom od pridruženih entiteta ili na oba.

Definiranje smjera odnosa između entiteta nema utjecaja na mapiranje baze podataka. Ona definira samo smjerove u kojima koristimo taj odnos u našem modelu domene.

Za dvosmjerni odnos obično definiramo:

  • strana koja posjeduje
  • inverzna ili referentna strana

The @JoinColumn napomena nam pomaže odrediti stupac koji ćemo koristiti za pridruživanje udruživanju entiteta ili kolekciji elemenata. S druge strane, mapiranBy atribut se koristi za definiranje referentne strane (strane koja nije vlasnik) odnosa.

U ovom ćemo brzom vodiču pogledati razlika između @JoinColumn i mapiranByu JPA. Također ćemo predstaviti kako ih koristiti u udruživanju jedan-prema-mnogima.

2. Početno postavljanje

Da slijedimo ovaj vodič, recimo da imamo dva entiteta: Zaposlenik i E-mail.

Jasno je da zaposlenik može imati više adresa e-pošte. Međutim, zadana adresa e-pošte može točno pripadati jednom zaposleniku.

To znači da dijele udruživanje jedan prema više:

Također u našem RDBMS modelu imat ćemo strani ključ zaposlenik_id u našem E-mail entitet koji se odnosi na iskaznica atribut an Zaposlenik.

3. @JoinColumn Bilješka

U odnosu jedan-prema-mnogima / mnogo-prema-jednom, strana posjedovanja obično se definira na "puno' strana odnosa. Obično je strana ta koja posjeduje strani ključ.

The @JoinColumn anotacija definira stvarno fizičko mapiranje na strani koja posjeduje:

@Entity javna klasa E-pošta {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @ManyToOne (fetch = FetchType.LAZY) @JoinColumn (name = "worker_id") privatni zaposlenik zaposlenika; // ...}

To jednostavno znači da je naš E-mail entitet imat će imenovani stupac stranog ključa zaposlenik_id pozivajući se na primarni atribut iskaznica Od našeg Zaposlenik entitet.

4. mapiranBy Atribut

Nakon što definiramo vlasničku stranu odnosa, Hibernate već ima sve potrebne informacije za mapiranje te veze u našoj bazi podataka. Da bismo ovu asocijaciju učinili dvosmjernom, sve što trebamo učiniti je definirati referencirajuću stranu. Inverzna ili referentna strana jednostavno se preslikava na stranu koja posjeduje.

Jednostavno možemo koristiti mapiranBy atribut @OneToMany napomena za to. Dakle, definirajmo svoje Zaposlenik entitet:

@Entity zaposlenik u javnoj klasi {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @OneToMany (fetch = FetchType.LAZY, mappedBy = "zaposlenik") privatne e-adrese s popisa; // ...}

Ovdje, vrijednost mapiranBy je naziv atributa mapiranja asocijacija na strani koja posjeduje. Ovime smo sada uspostavili dvosmjernu vezu između naših Zaposlenik i E-mail entiteta.

5. Zaključak

U ovom smo tutorijalu pogledali razliku između @JoinColumn i mapiranBy i kako ih koristiti u dvosmjernom odnosu jedan prema više.

The @JoinColumn anotacija definira stvarno fizičko mapiranje na strani koja posjeduje. S druge strane, referentna strana definira se pomoću mapiranBy atribut @OneToMany bilješka.

Kao i obično, izvorni kod dostupan je na Githubu.