5.1 Автоматично генериране на схема на данни

Когато за първи път конфигурирате Hibernate, можете да активирате много интересни настройки. Не съм ги носила преди, за да не пръскам. Но в края на нивото мисля за някои от тях, които да разкажа.

Първата такава настройка е hbm2ddl.auto. Може да има 5 различни стойности:

валидирам Проверка: Hibernate ще провери дали имената и типовете на колоните и полетата съвпадат в базата данни и в анотациите. Това е най-често срещаният режим.
актуализация Актуализация: Hibernate ще актуализира таблиците в базата данни, ако те or техните колони са различни от очакваното.
създавам Създаване наново: Hibernate ще изтрие всички таблици в базата данни и ще ги създаде отново въз основа на данните от анотациите.
създаване-пускане Създаване-изтриване. В началото на работата Hibernate ще създаде всички таблици, в края на работата ще ги изтрие след себе си.
нито един Хибернацията няма да направи абсолютно нищо. Ако някъде базата не отговаря на очакванията, тогава ще бъдат хвърлени грешки по време на изпълнението на заявките.

5.2 Регистриране на заявки

Втората много полезна настройка на Hibernate е записването на всички негови заявки към базата данни: всички заявки към базата данни се дублират в конзолата. Това е много полезна функция, ако правите промени в свързания с Hibernate code.

Първо, ще разберете по-добре How вашите заявки се преобразуват в SQL. Второ, по-лесно е и по-рано ще можете да намерите грешки. И определено ще го направят. Хибернацията не винаги работи по начина, по който очакваме. Това е особено често свързано с анотациите: вие ги разбирате по свой собствен начин и Hibernate по свой начин.

Настройката, която позволява регистриране, се нарича hibernate.show_sql. Ако зададете стойността му на true, тогава заявките към базата данни ще се записват в конзолата. Параметърът се използва и във връзка с него hibernate.format_sql, което ви позволява да зададете удобен формат на SQL заявка в дневника.

Друг начин за регистриране на заявки към базата данни е да използвате стандартния регистратор . Всичко даде факта, че Hibernate вече пише своите заявки към стандартния регистратор, но само с обхвата - DEBUG. Трябва да промените две свойства във вашия standardн регистратор:

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

Промяната на нивото на BasicBinder на traceще добави към нас параметри на заявката, но в малко необичайна форма - последователно изброяване след самата заявка.

Третият подход е да се използва специален прокси драйвер за базата данни .

Например, log4jdbcor p6spy. И двете проксита работят и имат стартери, въпреки че log4jdbcнямаше ангажименти дълго време към момента на писане.


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

Няма да навлизам в подробности, просто искам да знаете, че това е възможно.

5.3 SQL диалекти

И още малко основна информация.

Hibernate поддържа много голям брой СУБД. Всеки от тях имплементира standardн набор от SQL функции и някои други собствени. Или различни версии на SQL. Следователно, за да работите с тези СУБД, трябва да кажете на Hibernate кой диалект на SQL езика да използва.

Ето списък на най-популярните диалекти:

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 (всяка version) org.hibernate.dialect.OracleDialect
Oracle 11g org.hibernate.dialect.Oracle10gDialect

Разбира се, може да има произволен брой такива диалекти. Можете да напишете своя собствена СУБД и свой собствен диалект за нея.

Защо е важно да посочите правилния диалект?

Всяка база данни може да има леко различни типове данни. Следователно, за да работи Hibernate перфектно точно Howто очаквате от него, трябва да му кажете кой диалект на SQL езика трябва да използва.

Ето една интересна снимка, която показва How всичко е свързано в действителност:

5.4 Популярни настройки

За да улесним живота ви, ето пълен списък с няколко настройки:

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 поддържа повече функции от MySQL 5.0, така че ако искате Hibernate да се възползва максимално от всички тях, тогава посочете правилния диалект.

Базата данни H2 обикновено се съхранява в паметта, Howто mem:testи името на SQL сървъра и името на схемата, с която ще работите.