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.