A JPA-entitások meghatározása
1. Bemutatkozás
Ebben az oktatóanyagban megismerhetjük az entitások alapjait, valamint a JPA-ban egy entitást meghatározó és testreszabó különféle jegyzeteket.
2. Entitás
A JPA entitásai nem más, mint POJO-k, amelyek olyan adatokat tárolnak, amelyek fennmaradhatnak az adatbázisban. Az entitás egy adatbázisban tárolt táblázatot képvisel. Az entitás minden példánya egy sort jelent a táblázatban.
2.1. A Entitás Megjegyzés
Tegyük fel, hogy van POJO-junk Diák amely egy tanuló adatait reprezentálja, és szeretnénk az adatbázisban tárolni.
public class Student {// mezők, getterek és beállítók}
Ennek érdekében meg kell határoznunk egy entitást, hogy a JPA tudatában legyen annak.
Tehát definiáljuk a @Entity annotáció. Osztályszinten meg kell adnunk ezt az annotációt. Biztosítanunk kell azt is, hogy az entitás rendelkezzen argum nélküli konstruktorral és elsődleges kulccsal:
@Entity public class Student {// mezők, mérőeszközök és beállítók}
Az entitás neve alapértelmezés szerint az osztály neve. A nevét megváltoztathatjuk a név elem.
@Entity (név = "hallgató") nyilvános osztály Diák {// mezők, fogaskerekek és beállítók}
Mivel a különböző JPA megvalósítások megpróbálják alosztályba osztani az entitásunkat annak érdekében, hogy működőképességüket biztosítsák, az entitásosztályokat nem szabad deklarálni végső.
2.2. A Id Megjegyzés
Minden JPA entitásnak rendelkeznie kell egy elsődleges kulccsal, amely egyedileg azonosítja azokat. A @Id az annotáció határozza meg az elsődleges kulcsot. Az azonosítókat különböző módon generálhatjuk, amelyeket a @GeneratedValue annotáció.
Négy id generációs stratégia közül választhatunk a stratégia elem. Az érték lehet AUTO, TÁBLÁZAT, SZekvencia, vagy IDENTITÁS.
@Entity public class Student {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; privát karakterlánc neve; // szerelők és beállítók}
Ha megadjuk GenerationType.AUTO, a JPA szolgáltató minden olyan stratégiát felhasznál, amelyet az azonosítók előállításához akar.
Ha feljegyezzük az entitás mezőit, a JPA szolgáltató ezeket a mezőket használja az entitás állapotának megszerzéséhez és beállításához. A Field Access mellett elvégezhetünk tulajdonjogot vagy vegyes hozzáférést is, amely lehetővé teszi számunkra, hogy ugyanabban az entitásban használjuk a mező és a tulajdon hozzáférést is.
2.3. A asztal Megjegyzés
A legtöbb esetben, az adatbázisban lévő táblázat neve és az entitás neve nem lesz ugyanaz.
Ezekben az esetekben megadhatjuk a tábla nevét a @Asztal kommentár:
@Entity @Table (name = "STUDENT") nyilvános osztály Diák {// mezők, fogaskerekek és beállítók}
Megemlíthetjük a sémát a séma elem:
@Entity @Table (name = "STUDENT", schema = "ISKOLA") public class Student {// mezők, getterek és beállítók}
A séma neve segít megkülönböztetni az egyik táblázatkészletet a másiktól,
Ha nem használjuk a @Asztal megjegyzéssel, az entitás nevét a táblázat nevének tekintjük.
2.4. A Oszlop Megjegyzés
Akárcsak a @Asztal annotációval használhatjuk a @Oszlop kommentár a táblázat oszlopainak részleteinek megemlítésére.
A @Oszlop az annotációnak számos eleme van, például név, hossz, érvényteleníthető és egyedi.
@Entity @Table (name = "STUDENT") public class Student {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @ Oszlop (név = "STUDENT_NAME", hossz = 50, nullable = hamis, egyedi = hamis) privát karakterlánc neve; // egyéb mezők, getterek és beállítók}
A név elem adja meg a táblázat oszlopának nevét. A hossz elem határozza meg a hosszát. A semmissé tehető elem határozza meg, hogy az oszlop érvénytelen-e vagy sem, és a egyedi elem határozza meg, hogy az oszlop egyedi-e.
Ha nem adjuk meg ezt a kommentárt, akkor a mező nevét a táblázat oszlopának nevezzük.
2.5. A Átmeneti Megjegyzés
Előfordulhat, hogy szeretnénk tegyen egy mezőt tarthatatlanná. Használhatjuk a @ Átmeneti megjegyzés ahhoz. Megadja, hogy a mező nem marad meg.
Például kiszámíthatjuk a diák életkorát a születés dátumától.
Tehát jegyezzük fel a mezőt kor a ... val @ Átmeneti kommentár:
@Entity @Table (name = "STUDENT") public class Student {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @ Oszlop (név = "STUDENT_NAME", hossz = 50, nullable = hamis) privát karakterlánc neve; @ Átmeneti privát egész kor; // egyéb mezők, getterek és beállítók}
Ennek eredményeként a mező kor nem fog kitartani az asztal mellett.
2.6. A Időbeli Megjegyzés
Bizonyos esetekben időbeli értékeket kell mentenünk a táblázatunkba.
Ehhez megvan a @Időbeli kommentár:
@Entity @Table (name = "STUDENT") public class Student {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @ Oszlop (név = "STUDENT_NAME", hossz = 50, nullable = hamis, egyedi = hamis) privát karakterlánc neve; @ Átmeneti privát egész kor; @Temporal (TemporalType.DATE) privát születési dátum; // egyéb mezők, getterek és beállítók}
A JPA 2.2-vel azonban nekünk is van támogatásunk java.time.LocalDate, java.time.LocalTime, java.time.LocalDateTime, java.time.OffsetTime és java.time.OffsetDateTime.
2.7. A Felsorolt Megjegyzés
Előfordulhat, hogy fenn akarunk tartani egy Java-t enum típus.
Használhatjuk a @ Számlálva kommentár annak meghatározásához, hogy a enum név vagy sorszám szerint kell megtartani (alapértelmezett).
public enum Nem {MALE, FEMALE}
@Entity @Table (name = "STUDENT") public class Student {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @ Oszlop (név = "STUDENT_NAME", hossz = 50, nullable = hamis, egyedi = hamis) privát karakterlánc neve; @ Átmeneti privát egész kor; @Temporal (TemporalType.DATE) privát születési dátum; @ Számolt (EnumType.STRING) privát Nem; // egyéb mezők, getterek és beállítók}
Tulajdonképpen, nem kell megadnunk a @ Számlálva egyáltalán, ha fenn akarjuk tartani a Nem valami által enum’S sorszám.
Ahhoz azonban, hogy kitartson a Nem által enum névvel konfiguráltuk a jegyzetet a EnumType.STRING.
3. Következtetés
Ebben a cikkben megtudtuk, hogy mik a JPA entitások és hogyan hozhatók létre. Ismerkedtünk a különféle annotációkkal, amelyek felhasználhatók az entitás további testreszabására.
A cikk teljes kódja a Github oldalon található.