Indexek meghatározása a JPA-ban

1. Bemutatkozás

Ebben az oktatóanyagban megvitatjuk indexek meghatározása a JPA-k segítségével @Index annotáció. Példákon keresztül megtanuljuk, hogyan definiálhatjuk első indexünket a JPA és a Hibernate használatával. Ezt követően módosítani fogjuk a definíciót, bemutatva az index testreszabásának további lehetőségeit.

2. @Index Megjegyzés

Kezdjük egy gyors összefoglalóval. Az adatbázis index a adatstruktúra, amely javítja az asztalon történő adatlekérési műveletek sebességét további írások és tárhelyek árán. Többnyire ez a a kijelölt oszlopok másolata adatok egyetlen táblából. Indexeket kell létrehoznunk a perzisztencia réteg teljesítményének növelése érdekében.

A JPA lehetővé teszi számunkra, hogy ezt elérjük azáltal, hogy indexeket definiálunk a kódunkból @Index. Ezt a feliratot a séma létrehozásának folyamata értelmezi, automatikusan létrehozza a műtermékeket. Ne feledje, hogy nem szükséges indexet megadni az entitásainkhoz.

Most nézzük meg a definíciót.

2.1. javax.persistence.Index

Az index-támogatást végül hozzáadta a JPA 2.1 specifikációjához javax.persistence.Index. Ez a megjegyzés határozzon meg egy táblázatot tartalmazó indexet, és ennek megfelelően szabjuk testre:

@Target ({}) @Retention (RUNTIME) public @interface Index {String name () alapértelmezett ""; Karakterlánc oszlopList (); logikai egyedi () alapértelmezett hamis; }

Mint láthatjuk, csak a columnList attribútum kötelező, amelyet meg kell határoznunk. Később jobban megvizsgáljuk az egyes paramétereket, példákon keresztül.

2.2. JPA vs. Hibernate

Tudjuk, hogy a JPA csak specifikáció. A helyes működéshez meg kell adnunk a perzisztencia szolgáltatót is. Alapértelmezés szerint a Hibernate Framework a JPA által végrehajtott, Spring által megvalósított megvalósítás. Bővebben erről itt olvashat.

Emlékeznünk kell arra, hogy az index-támogatást nagyon későn adták hozzá a KPK-hoz. Előtte sok ORM keretrendszer támogatja az indexeket saját egyéni megvalósításuk bevezetésével, amelyek másképp működhetnek. A Hibernate Framework is megcsinálta és bevezette a org.hibernate.annotations.Index annotáció. A keretrendszerrel való munkavégzés során ügyelnünk kell arra, hogy a JPA 2.1 specifikáció támogatása óta elavult, és a JPA keretrendszerét kell használnunk.

Most, ha van némi technikai háttérünk, példákat nézhetünk át és meghatározhatjuk az első indexünket a JPA-ban.

3. A. Meghatározása @Index

Ebben a részben az indexünket hajtjuk végre. Később megpróbáljuk módosítani, különböző testreszabási lehetőségeket bemutatva.

Mielőtt elkezdenénk, megfelelően meg kell indítanunk a projektünket és meg kell határoznunk egy modellt.

Végezzük el a Diák entitás:

@Entity @Table nyilvános osztály A hallgató Serializable {@Id @GeneratedValue private Long id-t hajt végre; privát karakterlánc keresztnév; privát karakterlánc vezetéknév; // getters, setters}

Ha megvan a modellünk, valósítsuk meg az első indexet. Csak annyit kell tennünk, hogy hozzáadunk egy @Index annotáció. Tesszük ezt a @Asztal felirat a indexek tulajdonság. Ne felejtsük el megadni az oszlop nevét:

@Táblázat (indexek = @Index (oszloplista = "keresztnév"))

A legelső indexet deklaráltuk a keresztnév oszlop. Amikor végrehajtjuk a séma létrehozásának folyamatát, érvényesíthetjük:

[main] DEBUG org.hibernate.SQL - IDX2gdkcjo83j0c2svhvceabnnoh index létrehozása a Student (firstName) néven

Itt az ideje módosítani nyilatkozatunkat, amely további funkciókat mutat be.

3.1. @Index Név

Mint láthatjuk, az indexünknek nevet kell tartalmaznia. Alapértelmezés szerint, ha nem adjuk meg, akkor a szolgáltató által generált érték. Amikor egyedi címkét szeretnénk kapni, egyszerűen hozzá kell adnunk a név tulajdonság:

@Index (név = "fn_index", columnList = "keresztnév")

Ez a változat létrehoz egy indexet egy felhasználó által definiált névvel:

[main] DEBUG org.hibernate.SQL - fn_index index létrehozása a Student (keresztnév) néven

Ezenkívül létrehozhatjuk indexünket a különböző sémákban, ha megadjuk a séma nevét a név:

@Index (név = "schema2.fn_index", columnList = "keresztnév")

3.2. Többoszlopos @Index

Most nézzük meg közelebbről a columnList szintaxis:

oszlop :: = index_oszlop [, index_oszlop] * index_oszlop :: = oszlop_név [ASC | DESC]

Mint már tudjuk, megadhatjuk az indexbe beillesztendő oszlopneveket. Természetesen több oszlopot is megadhatunk az egyetlen indexhez. Ezt úgy tesszük, hogy a neveket vesszővel választjuk el:

@Index (név = "mulitIndex1", columnList = "keresztnév, vezetéknév") @Index (name = "mulitIndex2", columnList = "vezetékNév, keresztnév")
[main] DEBUG org.hibernate.SQL - index létrehozása mulitIndex1 a Student-on (keresztnév, vezetéknév) [main] DEBUG org.hibernate.SQL - index-mulitIndex2 létrehozása a Student-on (vezetéknév, keresztnév)

Vegye figyelembe, hogy a kitartásszolgáltatónak be kell tartania az oszlopok meghatározott sorrendjét. Példánkban az indexek kissé eltérnek, még akkor is, ha ugyanazt az oszlopkészletet adják meg.

3.3. @Index Rendelés

Amint áttekintettük az előző szakasz szintaxisát, megadhatjuk azt is ASC (növekvő) és DESC (csökkenő) értékek a oszlop_név. Használjuk az indexelt oszlopban található értékek rendezési sorrendjének beállításához:

@Index (név = "mulitSortIndex", columnList = "keresztnév, vezetéknév DESC")
[main] DEBUG org.hibernate.SQL - index mulitSortIndex létrehozása a Student-on (firstName, lastName desc)

Megadhatjuk az egyes oszlopok sorrendjét. Ha nem, akkor a növekvő sorrendet feltételezzük.

3.4. @Index Egyediség

Az utolsó opcionális paraméter a egyedi attribútum, amely meghatározza, hogy az index egyedi-e. Az egyedi index biztosítja, hogy az indexelt mezők ne tárolják az ismétlődő értékeket. Alapértelmezés szerint az hamis. Ha meg akarjuk változtatni, kijelenthetjük:

@Index (név = "egyediIndex", oszloplista = "keresztnév", egyedi = igaz)
[main] DEBUG org.hibernate.SQL - tábla módosítása A hallgató hozzáadhatja a kényszert egyediIndex egyedi (keresztnév)

Ha ilyen módon létrehozunk egy indexet, akkor egyediségi korlátot adunk az oszlopokhoz, hasonlóan ahhoz, hogy egyedi attribútum be @Oszlop annotáció. @Index előnye van @Oszlop a több oszlopos egyedi korlátozás deklarálásának lehetősége miatt:

@Index (név = "egyediMulitIndex", oszlopLista = "keresztnév, vezetéknév", egyedi = igaz)

3.5. Többszörös @Index egyetlen entitáson

Eddig az index különböző változatait valósítottuk meg. Természetesen nem korlátozódunk egyetlen index deklarálására az entitáson. Gyűjtsük össze deklarációinkat, és minden indexet adjunk meg egyszerre. Ezt megismételve tesszük @Index zárójelben és vesszővel elválasztva:

@Entity @Table (indexek = {@Index (columnList = "keresztnév"), @Index (név = "fn_index", columnList = "keresztnév"), @Index (name = "mulitIndex1", columnList = "keresztnév, vezetéknév" ), @Index (név = "mulitIndex2", columnList = "vezetékNév, keresztnév"), @Index (név = "mulitSortIndex", columnList = "keresztnév, vezetéknév DESC"), @Index (név = "egyediIndex", columnList = "keresztnév", egyedi = igaz), @Index (név = "egyediMulitIndex", oszloplista = "keresztnév, vezetéknév", egyedi = igaz)}) nyilvános osztály Diákok Serializálható

Sőt, több indexet is létrehozhatunk ugyanahhoz az oszlopkészlethez.

3.6. Elsődleges kulcs

Amikor indexekről beszélünk, egy ideig meg kell állnunk az elsődleges kulcsoknál. Mint tudjuk, a EntityManager meg kell adnia az elsődleges kulcshoz leképezett azonosítót.

Általában az elsődleges kulcs egy egyedi típusú egyedi index. Érdemes hozzátenni, hogy nem kell deklarálnunk a kulcs definícióját a korábban bemutatott módon. Mindent automatikusan a @Id annotáció.

3.7. Senki @Index

Miután megtanultuk az indexek megvalósításának különböző módjait, meg kell említenünk ezt @Asztal nem az egyetlen hely, ahol megadhatja őket. Ugyanígy deklarálhatjuk az indexeket a @SecondaryTable, @CollectionTable, @JoinTable, @TableGenerator annotációk. Ezeket a példákat ez a cikk nem tárgyalja. További részletekért kérjük, ellenőrizze a javax.kitartás JavaDoc.

4. Következtetés

Ebben a cikkben megvitattuk az indexek JPA használatával történő deklarálását. Azzal kezdtük, hogy áttekintettük a velük kapcsolatos általános ismereteket. Később megvalósítottuk első indexünket, és példákon keresztül megtanultuk, hogyan kell testre szabni a név, az oszlopok, a sorrend és az egyediség megváltoztatásával. Végül beszéltünk az elsődleges kulcsokról, valamint azokról a további módszerekről és helyekről, ahol deklarálhatjuk őket.

Mint mindig, a cikk példái elérhetők a GitHub oldalon.