5.1 Generarea automată a schemei de date

Când configurați pentru prima dată Hibernate, puteți activa o mulțime de setări interesante. Nu le-am adus înainte, ca să nu pulverizez. Dar la sfârșitul nivelului mă gândesc la unele dintre ele de spus.

Prima astfel de setare este hbm2ddl.auto. Poate avea 5 valori diferite:

valida Validare: Hibernate va verifica dacă numele și tipurile de coloane și câmpuri se potrivesc în baza de date și în adnotări. Acesta este cel mai comun mod.
Actualizați Actualizare: Hibernate va actualiza tabelele din baza de date dacă acestea sau coloanele lor sunt diferite de cele așteptate.
crea Recreează: Hibernate va șterge toate tabelele din baza de date și le va recrea pe baza datelor din adnotări.
crea-picura Creare-stergere. La începutul lucrării, Hibernate va crea toate tabelele, la sfârșitul lucrării, le va șterge după sine.
nici unul Hibernare nu va face absolut nimic. Dacă undeva baza nu se potrivește așteptărilor, atunci vor fi aruncate erori în timpul executării interogărilor.

5.2 Cereri de înregistrare

A doua setare foarte utilă a Hibernate este înregistrarea tuturor solicitărilor sale în baza de date: toate cererile către baza de date sunt duplicate în consolă. Aceasta este o caracteristică foarte utilă dacă faceți modificări codului legat de Hibernate.

În primul rând, veți înțelege mai bine cum sunt convertite interogările dvs. în SQL. În al doilea rând, este mai ușor și mai devreme vei putea găsi erori. Și cu siguranță o vor face. Hibernarea nu funcționează întotdeauna așa cum ne așteptăm. Acest lucru este adesea asociat cu adnotările: le înțelegeți în felul dvs. și Hibernați în felul dvs.

Setarea care permite înregistrarea se numește hibernate.show_sql. Dacă setați valoarea acesteia la true, atunci interogările în baza de date vor fi scrise în consolă. Parametrul este, de asemenea, utilizat împreună cu acesta hibernate.format_sql, ceea ce vă permite să setați un format convenabil de interogare SQL în jurnal.

O altă modalitate de a înregistra cererile în baza de date este utilizarea logger-ului standard . Totul a dat în faptul că Hibernate își scrie deja interogările în loggerul standard, dar numai cu scopul - DEBUG. Trebuie să modificați două proprietăți în loggerul standard:

logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace

Schimbarea nivelului de BasicBinder la tracene va adăuga parametrii de interogare, totuși, într-o formă ușor neobișnuită - enumerare secvențială după interogarea în sine.

A treia abordare este utilizarea unui driver proxy special pentru baza de date .

De exemplu, log4jdbcsau p6spy. Ambii proxy funcționează și au starters, deși log4jdbcnu au existat comiteri de mult timp la momentul scrierii.


<dependency>
    <groupId>com.integralblue</groupId>
    <artifactId>log4jdbc-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>com.github.gavlyukovskiy</groupId>
    <artifactId>p6spy-spring-boot-starter</artifactId>
</dependency>

Nu voi intra în detalii, vreau doar să știți că acest lucru este posibil.

5.3 Dialecte SQL

Și mai multe informații de fundal.

Hibernate acceptă un număr foarte mare de SGBD-uri. Fiecare dintre ele implementează un set standard de funcții SQL și unele altele proprii. Sau versiuni diferite de SQL. Prin urmare, pentru a lucra cu aceste DBMS, trebuie să spuneți lui Hibernate ce dialect al limbajului SQL să folosească.

Iată o listă cu cele mai populare dialecte:

PostgreSQL org.hibernate.dialect.PostgreSQLDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Sybase org.hibernate.dialect.SybaseDialect
Informix org.hibernate.dialect.InformixDialect
Microsoft SQL Server 2008 org.hibernate.dialect.SQLServer2008Dialect
MySQL org.hibernate.dialect.MySQLDialect
Oracle (orice versiune) org.hibernate.dialect.OracleDialect
Oracolul 11g org.hibernate.dialect.Oracle10gDialect

Desigur, pot exista orice număr de astfel de dialecte. Puteți scrie propriul dvs. DBMS și propriul dialect pentru el.

De ce este important să specificați dialectul corect?

Fiecare bază de date poate avea tipuri de date ușor diferite. Prin urmare, pentru ca Hibernate să funcționeze perfect exact așa cum vă așteptați de la el, trebuie să îi spuneți ce dialect al limbajului SQL trebuie să folosească.

Iată o imagine interesantă care arată cum totul este conectat în realitate:

5.4 Setări populare

Pentru a vă ușura viața, iată o listă completă cu mai multe setări:

MySQL 8.0
hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
hibernate.connection.driver_class=com.mysql.cj.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/test
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=validate
MySQL 5.0
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/test
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=validate
PostgreSQL
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.driver_class= org.postgresql.Driver
hibernate.connection.url= jdbc:postgresql://localhost/test
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=validate

MySQL 8.0 acceptă mai multe funcții decât MySQL 5.0, așa că dacă doriți ca Hibernate să profite la maximum de toate, atunci specificați dialectul corect.

Baza de date H2 este de obicei stocată în memorie, la fel mem:testși numele serverului SQL și numele schemei cu care veți lucra.