Adatbázis-séma generálása a Spring Data JPA segítségével
1. Áttekintés
A perzisztencia réteg létrehozásakor meg kell egyeznünk az SQL adatbázis sémánkat a kódunkban létrehozott objektum modellel. Ez sok munkát végezhet manuálisan.
Ebben az oktatóanyagban megnézzük, hogyan lehet generálni és exportálni az adatbázis-sémánkat az entitásmodellek alapján a kódunkból.
Először kitérünk a séma létrehozásának JPA konfigurációs tulajdonságaira. Ezután megvizsgáljuk, hogyan lehet ezeket a tulajdonságokat használni a Spring Data JPA-ban.
Végül megvizsgáljuk a DDL generálás alternatíváját a Hibernate natív API-jával.
2. JPA séma generálása
A JPA 2.1 bevezetett egy szabványt az adatbázis-sémák létrehozására. Ezért ezzel a kiadással kezdve szabályozhatjuk, hogyan állítsuk elő és exportáljuk adatbázis-sémánkat egy előre definiált konfigurációs tulajdonságok segítségével.
2.1. A script akció
Első, annak vezérlésére, hogy mely DDL parancsokat generáljuk, A JPA bemutatja a szkriptet akció konfigurációs lehetőség:
javax.persistence.schema-generation.scripts.action
Négy különböző lehetőség közül választhatunk:
- egyik sem - nem generál DDL parancsokat
- teremt - csak adatbázis létrehozási parancsokat generál
- csepp - csak adatbázis-eldobási parancsokat generál
- drop-and-create - generál adatbázis drop parancsokat, majd létrehozás parancsokat
2.2. A script cél
Másodszor, minden megadott szkripthez akció, meg kell határoznunk a megfelelőt cél konfiguráció:
javax.persistence.schema-generation.scripts.create-target javax.persistence.schema-generation.scripts.drop-target
Lényegében a forgatókönyv célmeghatározza a séma létrehozási vagy dobási parancsokat tartalmazó fájl helyét. Tehát például, ha úgy döntünk drop-and-create mint forgatókönyv akció meg kell határoznunk mindkettőt céls.
2.3. A séma Forrás
Végül, hogy az entitásmodelljeinkből előállítsuk a séma DDL parancsokat, bele kell foglalnunk a sémát forrás konfigurációk a metaadatok kiválasztott opció:
javax.persistence.schema-generation.create-source = metaadatok javax.persistence.schema-generation.drop-source = metaadatok
A következő részben bemutatjuk, hogyan használhatjuk a Spring Data JPA-t az adatbázis-sémánk automatikus előállításához a szokásos JPA tulajdonságokkal.
3. Séma-előállítás Spring Data JPA-val
3.1. A modellek
Képzeljük el, hogy egy felhasználói fiók rendszerét egy úgynevezett entitással valósítjuk meg Számla:
@Entity @Table (name = "accounts") public class Account {@Id @GeneratedValue private Long id; @ Oszlop (nullable = false, length = 100) privát karakterlánc neve; @Column (név = "email_cím") privát karakterlánc emailAddress; @OneToMany (mappedBy = "account", cascade = CascadeType.ALL) private List accountSettings = new ArrayList (); // szerelők és beállítók}
Minden fióknak több fiókbeállítása lehet, így itt egy-a-sokhoz kell hozzárendelnünk:
@Entity @Table (name = "account_settings") public class AccountSetting {@Id @GeneratedValue private Long id; @ Oszlop (név = "név", nullable = hamis) privát karakterlánc beállításNév; @Column (név = "érték", nullable = hamis) private String settingValue; @ManyToOne @JoinColumn (név, nullable = false) privát fiók; // szerelők és beállítók}
3.2. Tavaszi adatok JPA-konfiguráció
Az adatbázis-séma előállításához át kell adnunk a séma-előállító tulajdonságokat a használatban lévő perzisztencia-szolgáltatónak. Ehhez a natív JPA tulajdonságokat a konfigurációs fájlban a tavasz.jpa.tulajdonságok előtag:
spring.jpa.properties.javax.persistence.schema-generation.scripts.action = create spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target = create.sql spring.jpa.properties.javax. persistence.schema-generation.scripts.create-source = metaadatok
Következésképpen, A Spring Data JPA továbbítja ezeket a tulajdonságokat a kitartásszolgáltatónak, amikor létrehozza a EntityManagerFactory bab.
3.3. A create.sql File
Ennek eredményeként az alkalmazás indításakor a fenti konfiguráció generálja az adatbázis-létrehozási parancsokat az entitás-hozzárendelési metaadatok alapján. Továbbá a DDL parancsok exportálódnak a create.sql fájl, amely a fő projekt mappánkban jön létre:
tábla létrehozása account_settings (id bigint nem null, név varchar (255) nem null, érték varchar (255) nem null, account_id bigint nem null, elsődleges kulcs (id)) táblázatfiókok létrehozása (id bigint nem null, email_cím varchar (255) , név varchar (100) nem null, elsődleges kulcs (id)) alter table account_settings add kényszer FK54uo82jnot7ye32pyc8dcj2eh idegen kulcs (account_id) hivatkozások fiókok (id)
4. Séma létrehozása a Hibernate API-val
Ha hibernált módot használunk, közvetlenül használhatjuk a natív API-t, SchemaExport, a séma DDL parancsaink előállításához. Hasonlóképpen, a Hibernate API az alkalmazás-entitás modelljeinket használja az adatbázis-séma előállításához és exportálásához.
Hibernate-kel SchemaExport használhatjuk a csepp, createOnly, és teremt módszerek kifejezetten:
MetadataSources metadataSources = új MetadataSources (serviceRegistry); metadataSources.addAnnotatedClass (Számla.osztály); metadataSources.addAnnotatedClass (AccountSettings.class); Metadata metadata = metadataSources.buildMetadata (); SchemaExport schemaExport = new SchemaExport (); schemaExport.setFormat (true); schemaExport.setOutputFile ("create.sql"); schemaExport.createOnly (EnumSet.of (TargetType.SCRIPT), metaadatok);
Amikor futtatjuk ezt a kódot, az adatbázis-létrehozási parancsaink a create.sql fájlt a fő projekt mappánkban.
A SchemaExport a Hibernate Bootstrapping API része.
5. Séma létrehozási lehetőségek
Annak ellenére, hogy a séma létrehozása időt takaríthat meg nekünk a fejlesztés során, csak az alapvető forgatókönyvekhez kell használnunk.
Például használhatjuk a fejlesztési vagy adatbázis-gyors felgyorsításra.
Ezzel szemben az összetettebb forgatókönyveknél, mint például az adatbázis-migráció, finomabb szerszámokat kell használnunk, mint például a Liquibase vagy a Flyway.
6. Következtetés
Ebben az oktatóanyagban azt láttuk, hogyan lehet létrehozni és exportálni az adatbázis-sémánkat a JPA segítségével séma-generálás tulajdonságait. Ezt követően láttuk, hogyan lehet ugyanazt az eredményt elérni a Hibernate natív API-jával, SchemaExport.
Mint mindig, a példakódot megtalálhatjuk a GitHubon.