Vytvorte databázovú schému pomocou jarných údajov JPA

1. Prehľad

Pri vytváraní vrstvy perzistencie musíme zosúladiť našu databázovú schému SQL s objektovým modelom, ktorý sme vytvorili v našom kóde. To môže byť veľa práce robiť ručne.

V tomto návode uvidíme, ako vygenerovať a exportovať našu databázovú schému na základe modelov entít z nášho kódu.

Najskôr pokryjeme vlastnosti konfigurácie JPA pre generovanie schémy. Potom preskúmame, ako tieto vlastnosti použiť v Spring Data JPA.

Na záver preskúmame alternatívu pre generovanie DDL pomocou natívneho rozhrania API Hibernate.

2. Generovanie schémy JPA

JPA 2.1 zaviedlo štandard pre generovanie databázových schém. Preto počnúc týmto vydaním môžeme ovládať, ako generovať a exportovať našu databázovú schému prostredníctvom sady preddefinovaných konfiguračných vlastností.

2.1. Scenár akcia

Najprv, na kontrolu, ktoré príkazy DDL vygenerujeme, JPA predstavuje skript akcia možnosť konfigurácie:

javax.persistence.schema-generation.scripts.action

Môžeme si vybrať zo štyroch rôznych možností:

  • žiadny - negeneruje žiadne príkazy DDL
  • vytvoriť - generuje iba príkazy na vytvorenie databázy
  • pokles - generuje iba príkazy na zrušenie databázy
  • drop-and-create - generuje príkazy na zrušenie databázy nasledované príkazmi create

2.2. Scenár cieľ

Po druhé, pre každý zadaný skript akcia, budeme musieť definovať zodpovedajúce cieľ konfigurácia:

javax.persistence.schema-generation.scripts.create-target javax.persistence.schema-generation.scripts.drop-target

V podstate scenár cieľdefinuje umiestnenie súboru, ktorý obsahuje príkazy na vytvorenie alebo zrušenie schémy. Napríklad, ak sa rozhodneme drop-and-create ako skript akcia budeme musieť špecifikovať oboje cieľs.

2.3. Schéma Zdroj

Na záver, aby sme vygenerovali príkazy schémy DDL z našich modelov entít, mali by sme zahrnúť schému zdroj konfigurácie s metadáta vybraná možnosť:

javax.persistence.schema-generation.create-source = metadata javax.persistence.schema-generation.drop-source = metadata

V nasledujúcej časti si ukážeme, ako môžeme pomocou Spring Data JPA automaticky vygenerovať našu databázovú schému so štandardnými vlastnosťami JPA.

3. Generovanie schémy s jarnými údajmi JPA

3.1. Modely

Poďme si predstaviť, že implementujeme systém používateľských účtov s entitou, ktorá sa volá Účet:

@Entity @Table (name = "accounts") verejná trieda Účet {@Id @GeneratedValue private Long id; @Column (nullable = false, length = 100) private String name; @Column (name = "email_address") private String emailAddress; @OneToMany (mappedBy = "účet", cascade = CascadeType.ALL) súkromný zoznam accountSettings = nový ArrayList (); // zakladatelia a zakladatelia}

Každý účet môže mať viac nastavení účtu, takže tu budeme mať mapovanie jedného k mnohým:

@Entity @Table (name = "account_settings") verejná trieda AccountSetting {@Id @GeneratedValue private Long id; @Column (name = "name", nullable = false) private String settingName; @Column (name = "value", nullable = false) private String settingValue; @ManyToOne @JoinColumn (name, nullable = false) súkromný účet účtu; // zakladatelia a zakladatelia} 

3.2. Konfigurácia JPA jarných údajov

Teraz, aby sme vygenerovali databázovú schému, budeme musieť odovzdať vlastnosti generovania schémy použitému poskytovateľovi perzistencie. Za týmto účelom nastavíme natívne vlastnosti JPA v našom konfiguračnom súbore pod spring.jpa.properties predpona:

spring.jpa.properties.javax.persistence.schema-generation.scripts.action = vytvoriť spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target = create.sql spring.jpa.properties.javax. persistence.schema-generation.scripts.create-source = metadáta

V dôsledku toho Spring Data JPA odovzdáva tieto vlastnosti poskytovateľovi perzistencie, keď vytvorí EntityManagerFactory fazuľa.

3.3. The create.sql Súbor

Výsledkom je, že pri spustení aplikácie vyššie uvedená konfigurácia vygeneruje príkazy na vytvorenie databázy na základe metadát mapovania entít. Ďalej sa príkazy DDL exportujú do súboru create.sql súbor, ktorý je vytvorený v našom hlavnom priečinku projektu:

vytvoriť tabuľku account_settings (id bigint nie je null, meno varchar (255) nie je null, hodnota varchar (255) nie je null, account_id bigint nie je null, primárny kľúč (id)) vytvorenie tabuľky účtov (id bigint nie je null, email_address varchar (255) , name varchar (100) not null, primary key (id)) alter table account_settings add constraint FK54uo82jnot7ye32pyc8dcj2eh cudzí kľúč (account_id) referencie accounts (id)

4. Generovanie schémy pomocou rozhrania Hibernate API

Ak používame režim dlhodobého spánku, môžeme použiť priamo jeho natívne API, SchemaExport, na generovanie našich príkazov schémy DDL. Rovnako aj rozhranie Hibernate API používa naše modely entít aplikácií na generovanie a export schémy databázy.

S režimom dlhodobého spánku SchemaExport môžeme použiť pokles, createOnly, a vytvoriť metódy výslovne:

MetadataSources metadataSources = nové MetadataSources (serviceRegistry); metadataSources.addAnnotatedClass (Account.class); metadataSources.addAnnotatedClass (AccountSettings.class); Metadata metadata = metadataSources.buildMetadata (); SchemaExport schemaExport = nový SchemaExport (); schemaExport.setFormat (true); schemaExport.setOutputFile ("create.sql"); schemaExport.createOnly (EnumSet.of (TargetType.SCRIPT), metadáta);

Keď spustíme tento kód, naše príkazy na vytvorenie databázy sa exportujú do súboru create.sql súbor v našom hlavnom priečinku projektu.

The SchemaExport je súčasťou rozhrania Hibernate Bootstrapping API.

5. Možnosti generovania schémy

Aj keď nám generovanie schémy môže ušetriť čas počas vývoja, mali by sme ju používať iba pre základné scenáre.

Mohli by sme ho napríklad použiť na rýchle rozprúdenie vývoja alebo testovania databáz.

Naopak pre zložitejšie scenáre, ako je migrácia databázy, mali by sme používať prepracovanejšie nástroje ako Liquibase alebo Flyway.

6. Záver

V tomto tutoriáli sme videli, ako vygenerovať a exportovať našu databázovú schému pomocou JPA generovanie schém vlastnosti. Následne sme videli, ako dosiahnuť rovnaký výsledok pomocou natívneho API rozhrania Hibernate, SchemaExport.

Ako vždy, ukážkový kód nájdeme na GitHube.


$config[zx-auto] not found$config[zx-overlay] not found