5.1 Automatikus adatséma generálás

Amikor először konfigurálja a hibernált állapotot, sok érdekes beállítást engedélyezhet. Előtte nem hoztam őket, hogy ne permetezzem. De a szint végén néhányra gondolok, hogy elmondjam.

Az első ilyen beállítás a hbm2ddl.auto. 5 különböző értéke lehet:

érvényesít Érvényesítés: A Hibernate ellenőrzi, hogy az oszlop- és mezőnevek és -típusok egyeznek-e az adatbázisban és a megjegyzésekben. Ez a leggyakoribb mód.
frissítés Frissítés: A Hibernate frissíti az adatbázis tábláit, ha azok vagy oszlopaik eltérnek a várttól.
teremt Újrakészítés: A Hibernate törli az adatbázisban lévő összes táblát, és újra létrehozza azokat a megjegyzésekből származó adatok alapján.
létrehozás-ledobás Létrehozás-törlés. A munka elején a Hibernate létrehozza az összes táblát, a munka végén pedig maga után törli azokat.
egyik sem A hibernált állapot egyáltalán nem csinál semmit. Ha valahol az alap nem felel meg az elvárásoknak, akkor a lekérdezések végrehajtása során hibákat dobnak fel.

5.2 Kérelmek naplózása

A Hibernate második nagyon hasznos beállítása az összes kérés naplózása az adatbázisban: az adatbázishoz intézett összes kérés duplikálva van a konzolon. Ez egy nagyon hasznos funkció, ha módosítja a hibernálással kapcsolatos kódot.

Először is jobban megérti, hogyan konvertálják a lekérdezéseket SQL-be. Másodszor, könnyebb és hamarabb megtalálhatja a hibákat. És biztosan meg is fogják. A hibernált állapot nem mindig a várt módon működik. Ez különösen gyakran kapcsolódik az annotációkhoz: a saját módján érti őket, és a maga módján hibernálja.

A naplózást lehetővé tevő beállítás az ún hibernate.show_sql. Ha az értékét igazra állítja, akkor az adatbázis lekérdezései a konzolra kerülnek. A paraméter vele együtt is használatos hibernate.format_sql, ami lehetővé teszi egy kényelmes SQL lekérdezési formátum beállítását a naplóban.

Egy másik módja a kérések naplózásának az adatbázisba a szabványos naplózó használata . Minden adott abban, hogy a Hibernate már írja lekérdezéseit a szabványos naplózóba, de csak a hatókörrel - DEBUG. Két tulajdonságot kell módosítania a szabványos naplózóban:

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

A BasicBinder szintjének módosítása a lekérdezési paramétereket ad tracehozzánk, azonban kissé szokatlan formában - a lekérdezés utáni szekvenciális felsorolásban.

A harmadik megközelítés egy speciális proxy-illesztőprogram használata az adatbázishoz .

Például, log4jdbcvagy p6spy. Mindkét proxy működik, és vannak indítói is, bár log4jdbcaz írás idején sokáig nem volt commit.


<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>

Nem megyek bele a részletekbe, csak szeretném, ha tudná, hogy ez lehetséges.

5.3 SQL dialektusok

És még néhány háttérinformáció.

A Hibernate nagyon sok DBMS-t támogat. Mindegyikük egy szabványos SQL-függvény-készletet valósít meg, és néhányat a sajátjukból. Vagy az SQL különböző verziói. Ezért a DBMS-ekkel való együttműködéshez meg kell adnia a Hibernate-nak, hogy az SQL nyelv melyik dialektusát használja.

Íme a legnépszerűbb dialektusok listája:

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 (bármilyen verzió) org.hibernate.dialect.OracleDialect
Oracle 11g org.hibernate.dialect.Oracle10gDialect

Természetesen számtalan ilyen dialektus létezhet. Írhat hozzá saját DBMS-t és saját nyelvjárást.

Miért fontos a helyes nyelvjárás megadása?

Az egyes adatbázisok némileg eltérő adattípusokkal rendelkezhetnek. Ezért annak érdekében, hogy a Hibernate tökéletesen működjön, pontosan úgy, ahogyan elvárja tőle, meg kell adnia neki, hogy az SQL nyelv melyik dialektusát kell használnia.

Íme egy érdekes kép, amely megmutatja, hogy minden a valóságban hogyan függ össze:

5.4 Népszerű beállítások

Életének megkönnyítése érdekében itt található néhány beállítás teljes listája:

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

A MySQL 8.0 több funkciót támogat, mint a MySQL 5.0, ezért ha azt szeretné, hogy a Hibernate a legtöbbet hozza ki ezekből, adja meg a megfelelő dialektust.

A H2 adatbázis általában a memóriában van tárolva, így mem:testaz SQL szerver neve és a séma neve is, amellyel dolgozni fog.