Hibernate One to Many Annotation Tutorial
Introduction
Ez a gyors hibernált bemutató egy példát mutat be egy-sok leképezés segítségével JPA kommentárok, alternatívája az XML.
azt is megtudjuk, hogy milyen kétirányú kapcsolatok vannak, hogyan hozhatnak létre ellentmondásokat, és hogyan segíthet a tulajdonjog gondolata.
További olvasmány:
tavaszi csomagtartó Hibernate
A Hibernate/JPA
leírás
egyszerűen fogalmazva, az egy-sok leképezés azt jelenti, hogy a táblázat egyik sora egy másik táblázat több sorára van leképezve.
nézzük a következő egység a kapcsolat diagram látni egy-sok egyesület:
ebben A példában, majd végre egy kocsi rendszer, ahol van egy táblázat minden olyan kocsit, valamint egy másik táblázatban az egyes elemek. Egy kosárban sok elem lehet, tehát itt van egy egy-sok leképezés.
az adatbázis szintjén ez úgy működik, hogy van egy cart_id, mint elsődleges kulcs a kosárasztalban, valamint egy cart_id, mint idegen kulcs az elemekben.
a kódolás módja a @OneToMany.
térképezzük fel a Kosárosztályt az elemek objektumra oly módon, hogy tükrözze az adatbázisban lévő kapcsolatot:
public class Cart { //... @OneToMany(mappedBy="cart") private Set<Items> items; //...}
a @ManyToOne használatával is hivatkozhatunk a kosárra, így ez kétirányú kapcsolat. A kétirányú azt jelenti, hogy képesek vagyunk hozzáférni a kocsikból származó tárgyakhoz, valamint az elemekből származó kocsikhoz.
a mappedBy tulajdonság az, amit arra használunk, hogy elmondjuk Hibernate melyik változót használjuk a szülői osztály képviseletére gyermekosztályunkban.
a következő technológiákat és könyvtárakat használják egy minta hibernált alkalmazás kifejlesztéséhez, amely egy-sok társítást valósít meg:
- JDK 1.8 vagy újabb
- Hibernate 5
- Maven 3 vagy újabb
- H2 adatbázis
Setup
3.1. Adatbázis-beállítás
Az alábbiakban a kosár és az elemek táblázatokhoz tartozó adatbázis-szkriptünk található. Az idegen kulcskorlátozást egy-sok leképezéshez használjuk:
adatbázis-beállításunk készen áll, ezért lépjünk tovább a Hibernate példaprojekt létrehozásához.
3.2. Maven függőségek
ezután hozzáadjuk a hibernált és H2 driver függőségeket a pom-hoz.xml fájl. A hibernált függőség JBoss naplózást használ, és automatikusan átmeneti függőségként kerül hozzáadásra:
- Hibernate 5.2.7 verzió.Végleges
- H2 illesztőprogram 1.4-es verziója.197
kérjük, látogasson el a Maven központi tárolójába a Hibernate és a H2 függőségek legújabb verzióihoz.
3, 3. Hibernate Configuration
itt található a Hibernate konfigurációja:
3.4. HibernateAnnotationUtil osztály
a HibernateAnnotationUtil osztály, csak meg kell hivatkozni az új Hibernate konfigurációs fájl:
A modellek
a leképezés kapcsolódó konfigurációk segítségével történik JPA kommentárok a modell osztályok:
@Entity@Table(name="CART")public class Cart { //... @OneToMany(mappedBy="cart") private Set<Items> items; // getters and setters}
kérjük, vegye figyelembe, hogy a @OneToMany megjegyzés a tulajdonság meghatározására szolgál az Items osztályban, amelyet a mappedBy változó feltérképezésére használnak. Ezért van egy “cart” nevű tulajdonságunk az elemek osztályban:
fontos megjegyezni, hogy a @ManyToOne annotáció a Cart class változóhoz van társítva. @JoinColumn annotáció hivatkozik a leképezett oszlopra.
Akció
a vizsgálati program létrehozunk egy osztályba, egy main() metódus, hogy a Hibernálás Ülésen, majd mentse a modell objektumok az adatbázisba, végrehajtási, hogy az egy-a-sok egyesület:
Ez a kimenet a teszt program:
A @ManyToOne Jegyzet
Mint láttuk, 2. szakasz, megadhatunk egy sok-az-egyhez kapcsolat segítségével @ManyToOne jegyzet. A many-to-one leképezés azt jelenti, hogy ennek az entitásnak sok példánya egy másik entitás egyik példányára van leképezve – sok elem egy kosárban.
a @ManyToOne kommentár segítségével kétirányú kapcsolatokat is létrehozhatunk. Ezt részletesen tárgyaljuk a következő néhány alszakaszban.
6.1. Következetlenségek és tulajdonosi
most, ha a KOSÁR hivatkozott elemeket, de tételek nem viszont referencia kosár, a kapcsolat lenne egyirányú. A tárgyak természetes konzisztenciájúak is lennének.
esetünkben azonban a kapcsolat kétirányú, ami az inkonzisztencia lehetőségét eredményezi.
képzeljünk el egy olyan helyzetet, ahol a fejlesztő szeretné, hogy adjunk item1 a kosárba, majd item2, hogy cart2, de hibázik, így a hivatkozások között cart2, valamint item2 egyenetlen lesz:
Mint látható, a fenti item2 hivatkozások cart2, mivel cart2 nem referencia item2, ez pedig rossz.
hogyan kell hibernálni menteni item2 az adatbázisba? Item2 külföldi kulcs referencia cart1 vagy cart2?
ezt a kétértelműséget a kapcsolat birtokló oldalának gondolatával oldjuk meg; a birtokló oldalhoz tartozó hivatkozások elsőbbséget élveznek, és az adatbázisba kerülnek.
6, 2. Tételek, mint a birtokló oldal
amint azt a JPA specifikáció a 2.9. szakasz, Ez egy jó gyakorlat, hogy jelölje meg a sok-az egyik oldalon, mint a birtokló oldalon.
más szóval, az elemek a birtokló oldal, a kocsi pedig az inverz oldal, ami pontosan az, amit korábban tettünk.
tehát hogyan sikerült ezt elérni?
a Mappedby attribútumnak a Kosárosztályba való beillesztésével inverz oldalként jelöljük meg.
ugyanakkor kommentáljuk az elemeket is.kosár mező @ManyToOne, így elemek a birtokló oldalon.
visszatérve az “inkonzisztencia” példánkhoz, most Hibernate tudja, hogy az item2 hivatkozása fontosabb, és megmenti az item2 hivatkozását az adatbázisra.
ellenőrizzük az eredményt:
item1 ID=1, Foreign Key Cart ID=1item2 ID=2, Foreign Key Cart ID=2
bár a KOSÁR a részletekben az item2-re hivatkozik, az item2 a cart2-re való hivatkozása az adatbázisba kerül.
6, 3. Cart mint a birtokló oldalon
az is lehetséges, hogy jelölje meg az egy-a-sok oldalon, mint a birtokló oldalon, és sok-az-egyik oldalon, mint az inverz oldalon.
bár ez nem ajánlott gyakorlat, próbáljuk meg.
az alábbi kódrészlet az egy-sok oldal birtokló oldalként történő megvalósítását mutatja:
figyeljük meg, hogyan távolítottuk el a mappedBy elemet, és állítsuk be a sok-egy @JoinColumn-t beilleszthető és frissíthető false-ra.
Ha ugyanazt a kódot futtatjuk, az eredmény ellentétes lesz:
item1 ID=1, Foreign Key Cart ID=1item2 ID=2, Foreign Key Cart ID=1
a fentiek szerint az item2 a kosárhoz tartozik.
következtetés
láttuk, hogy milyen egyszerű a Hibernate ORM és H2 adatbázissal való egy-egy kapcsolat megvalósítása JPA kommentárok segítségével.
továbbá megismertük a kétirányú kapcsolatokat, valamint azt, hogy hogyan valósítsuk meg a birtokló oldal fogalmát.
Leave a Reply