Különbség a @JoinColumn és a mappedBy között

1. Bemutatkozás

A JPA kapcsolatai lehetnek egyirányúak vagy kétirányúak. Ez egyszerűen azt jelenti, hogy attribútumként modellezhetjük őket a társított entitások egyikén vagy mindkettőn.

Az entitások közötti kapcsolat irányának meghatározása nincs hatással az adatbázis-leképezésre. Csak azt határozza meg, hogy milyen irányban használjuk ezt a kapcsolatot a domain modellünkben.

Kétirányú kapcsolat esetén általában meghatározzuk:

  • a tulajdonos oldal
  • inverz vagy a hivatkozó oldal

A @JoinColumn a kommentár segít meghatározni azt az oszlopot, amelyet egy entitás társításhoz vagy elemgyűjteményhez való csatlakozáshoz használunk. Másrészt a feltérképezve attribútum a kapcsolat hivatkozási oldalának (nem tulajdonos oldalának) meghatározására szolgál.

Ebben a gyors bemutatóban megnézzük a különbség @JoinColumn és feltérképezvea JPA-ban. Bemutatjuk azt is, hogyan lehet felhasználni őket egy-a-sokhoz egyesületben.

2. Kezdeti beállítás

Ennek az oktatóanyagnak a folytatásához tegyük fel, hogy két entitásunk van: Munkavállaló és Email.

Egy alkalmazottnak egyértelműen több e-mail címe lehet. Egy adott e-mail cím azonban pontosan egyetlen alkalmazotthoz tartozhat.

Ez azt jelenti, hogy egy a sokhoz társulásuk van:

Az RDBMS modellünkben is lesz egy idegen kulcsunk munkavállalói azonosító miénkben Email a id attribútuma egy Munkavállaló.

3. @JoinColumn Megjegyzés

Egy a sokhoz / sok az egyhez viszonyban a tulajdonos oldalt általában a „sok' a kapcsolat oldala. Általában az az oldal birtokolja az idegen kulcsot.

A @JoinColumn az annotáció meghatározza azt a tényleges fizikai leképezést a tulajdonos oldalon:

@Entity public class Email {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @ManyToOne (fetch = FetchType.LAZY) @JoinColumn (név = "alkalmazott_azonosító") magán alkalmazott alkalmazott; // ...}

Ez egyszerűen azt jelenti, hogy a mi Email az entitásnak lesz egy idegen kulcs oszlopa munkavállalói azonosító utalva az elsődleges attribútumra id a mi Munkavállaló entitás.

4. feltérképezve Tulajdonság

Miután meghatároztuk a kapcsolat tulajdonjogi oldalát, a Hibernate már rendelkezik minden információval, amelyre szükség van a kapcsolat feltérképezéséhez az adatbázisunkban. Ahhoz, hogy ez az asszociáció kétirányú legyen, csak annyit kell tennünk, hogy meghatározzuk a hivatkozási oldalt. Az inverz vagy a hivatkozó oldal egyszerűen a tulajdonos oldalra térképez.

Könnyen használhatjuk a feltérképezve attribútuma @Egy a sokhoz megjegyzés ahhoz. Tehát, definiáljuk a mi Munkavállaló entitás:

@Entity public class Employee {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @OneToMany (fetch = FetchType.LAZY, mappedBy = "alkalmazott") privát lista e-mailek; // ...}

Itt, az értéke feltérképezve az asszociáció-leképezés attribútum neve a tulajdonos oldalon. Ezzel most kétirányú társulást hoztunk létre a mi Munkavállaló és Email entitások.

5. Következtetés

Ebben az oktatóanyagban megvizsgáltuk a különbséget @JoinColumn és feltérképezve és hogyan lehet felhasználni őket egy-a-két-kétirányú kapcsolatban.

A @JoinColumn az annotáció meghatározza a tényleges fizikai leképezést a tulajdonos oldalon. Másrészt a hivatkozási oldal a feltérképezve attribútuma @Egy a sokhoz annotáció.

Szokás szerint a forráskód elérhető a Githubon.