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.