JPA @ beágyazott és @ beágyazható
1. Áttekintés
Ebben az oktatóanyagban meglátjuk, hogyan tudunk egyetlen beágyazott tulajdonságokat tartalmazó entitást feltérképezni egyetlen adatbázis-táblába.
Tehát erre a célra a @ Beágyazható és @Beágyazott a Java Persistence API (JPA) által nyújtott kommentárok.
2. Adatmodell kontextus
Először is definiáljunk egy nevű táblázatot vállalat.
A vállalat táblázat tartalmazza az alapvető információkat, például a cég nevét, címét és telefonszámát, valamint egy kapcsolattartó személy adatait:
public class Company {private Integer id; privát karakterlánc neve; privát String cím; saját String telefon; privát karakterlánc contactFirstName; privát karakterlánc contactLastName; privát String contactPhone; // szokásos getters, setters}
A kapcsolattartó azonban úgy tűnik, hogy külön osztálynak kellene elvonatkoztatni. Az a probléma nem akarunk külön táblázatot létrehozni ezekhez a részletekhez. Lássuk, mit tehetünk.
3. @ Beágyazható
A JPA biztosítja a @ Beágyazható kommentár annak kijelentésére, hogy egy osztályt más entitások fognak beágyazni.
Határozzunk meg egy osztályt, hogy kivonjuk a kapcsolattartó adatait:
@ Beágyazható nyilvános osztály ContactPerson {private String keresztnév; privát karakterlánc vezetéknév; saját String telefon; // szokásos getters, setters}
4. @Beágyazott
A JPA kommentárja @Beágyazott a típus beágyazására szolgál egy másik entitásba.
Módosítsuk a következőt Vállalat osztály. Hozzáadjuk a JPA kommentárjait, és a használatukat is megváltoztatjuk Kapcsolattartó külön mezők helyett:
@Entity public class Company {@Id @GeneratedValue private Integer azonosító; privát karakterlánc neve; privát String cím; saját String telefon; @ Beágyazott privát ContactPerson contactPerson; // szokásos getters, setters}
Ennek eredményeként megvan az entitásunk Vállalat, kapcsolattartói adatok beágyazása és leképezés egyetlen adatbázis-táblába.
Még mindig van még egy problémánk, és ez az hogyan fogja a JPA feltérképezni ezeket a mezőket az adatbázis oszlopaiba.
5. Attribútumok felülbírálása
A helyzet az, hogy a mi területeinket ilyennek hívták contactFirstName eredeti példányunkban Vállalat osztály és most keresztnév miénkben Kapcsolattartó osztály. Tehát a JPA szeretné ezeket feltérképezni kapcsolat_név és keresztnév, illetőleg.
Azon kívül, hogy kevesebb, mint ideális, valójában megtör minket a most megismétlődöttekkel telefon oszlop.
Tehát használhatjuk @AttributeOverrides és @AttibuteOverride hogy felülbírálja beágyazott típusunk oszlop tulajdonságait.
Tegyük hozzá ezt a Kapcsolattartó mező a mi Vállalat entitás:
@Embedded @AttributeOverrides ({@AttributeOverride (név = "keresztnév", oszlop = @ oszlop (név = "kapcsolat_neve")), @AttributeOverride (név = "vezetéknév", oszlop = @ oszlop (név = "kapcsolattartó_neve")), @AttributeOverride (név = "telefon", oszlop = @ Oszlop (név = "kapcsolattartó telefon"))}) privát ContactPerson contactPerson;
Ne feledje, hogy mivel ezek a feliratok a mezőre kerülnek, az egyes befoglaló entitásokhoz különböző felülírásaink lehetnek.
6. Következtetés
Ebben az oktatóanyagban egy entitást konfiguráltunk néhány beágyazott attribútummal, és azokat ugyanazon az adatbázis-táblához rendeltük, mint a mellékelő entitást. Ehhez a @Beágyazott, @ Beágyazható, @AttributeOverrides és @AttributeOverride a Java Persistence API által nyújtott kommentárok.
Mint mindig, a példa forráskódja elérhető a GitHubon.