5.1 Automatische Datenschemagenerierung

Wenn Sie Hibernate zum ersten Mal konfigurieren, können Sie viele interessante Einstellungen aktivieren. Ich habe sie vorher nicht mitgebracht, um nicht zu spritzen. Aber am Ende des Levels denke ich darüber nach, einige davon zu erzählen.

Die erste derartige Einstellung ist die hbm2ddl.auto. Es kann 5 verschiedene Werte haben:

bestätigen Validierung: Hibernate prüft, ob die Spalten- und Feldnamen und -typen in der Datenbank und in den Anmerkungen übereinstimmen. Dies ist der häufigste Modus.
aktualisieren Update: Hibernate aktualisiert die Tabellen in der Datenbank, wenn diese oder ihre Spalten anders als erwartet sind.
erstellen Neu erstellen: Hibernate löscht alle Tabellen in der Datenbank und erstellt sie basierend auf den Daten aus den Anmerkungen neu.
Create-Drop Schöpfung-Löschung. Zu Beginn der Arbeit erstellt Hibernate alle Tabellen und löscht sie am Ende der Arbeit nacheinander.
keiner Der Ruhezustand bringt überhaupt nichts. Wenn die Basis irgendwo nicht den Erwartungen entspricht, werden bei der Ausführung von Abfragen Fehler ausgegeben.

5.2 Protokollierungsanfragen

Die zweite sehr nützliche Einstellung von Hibernate ist die Protokollierung aller Anfragen an die Datenbank: Alle Anfragen an die Datenbank werden in der Konsole dupliziert. Dies ist eine sehr nützliche Funktion, wenn Sie Änderungen am Hibernate-bezogenen Code vornehmen.

Zunächst werden Sie besser verstehen, wie Ihre Abfragen in SQL konvertiert werden. Zweitens ist es einfacher und früher, Fehler zu finden. Und das werden sie auf jeden Fall. Der Ruhezustand funktioniert nicht immer wie erwartet. Dies wird besonders häufig mit Anmerkungen in Verbindung gebracht: Sie verstehen sie auf Ihre eigene Weise und den Ruhezustand auf Ihre eigene Weise.

Die Einstellung, die die Protokollierung ermöglicht, heißt hibernate.show_sql. Wenn Sie den Wert auf „true“ setzen, werden Abfragen an die Datenbank in die Konsole geschrieben. Der Parameter wird auch in Verbindung damit verwendet hibernate.format_sql, wodurch Sie ein praktisches SQL-Abfrageformat im Protokoll festlegen können.

Eine andere Möglichkeit, Anfragen an die Datenbank zu protokollieren, ist die Verwendung des Standard-Loggers . Alles deutete darauf hin, dass Hibernate seine Abfragen bereits an den Standard-Logger schreibt, jedoch nur mit dem Gültigkeitsbereich DEBUG. Sie müssen zwei Eigenschaften in Ihrem Standard-Logger ändern:

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

Wenn wir die Ebene von BasicBinder ändern, werden traceuns Abfrageparameter hinzugefügt, allerdings in einer etwas ungewöhnlichen Form – sequentielle Aufzählung nach der Abfrage selbst.

Der dritte Ansatz besteht darin, einen speziellen Proxy-Treiber für die Datenbank zu verwenden .

Zum Beispiel log4jdbcoder p6spy. Beide Proxys funktionieren und verfügen über Starter, obwohl log4jdbces zum Zeitpunkt des Verfassens dieses Artikels lange Zeit keine Commits gab.


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

Ich werde nicht auf Details eingehen, ich möchte nur, dass Sie wissen, dass dies möglich ist.

5.3 SQL-Dialekte

Und noch ein paar Hintergrundinformationen.

Hibernate unterstützt eine sehr große Anzahl von DBMS. Jeder von ihnen implementiert einen Standardsatz von SQL-Funktionen und einige weitere eigene. Oder verschiedene Versionen von SQL. Um mit diesen DBMS arbeiten zu können, müssen Sie Hibernate daher mitteilen, welcher Dialekt der SQL-Sprache verwendet werden soll.

Hier ist eine Liste der beliebtesten Dialekte:

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 (jede Version) org.hibernate.dialect.OracleDialect
Oracle 11g org.hibernate.dialect.Oracle10gDialect

Natürlich kann es beliebig viele solcher Dialekte geben. Sie können Ihr eigenes DBMS und Ihren eigenen Dialekt dafür schreiben.

Warum ist es wichtig, den richtigen Dialekt anzugeben?

Jede Datenbank kann leicht unterschiedliche Datentypen haben. Damit Hibernate genau so funktioniert, wie Sie es erwarten, müssen Sie ihm daher mitteilen, welchen Dialekt der SQL-Sprache es verwenden muss.

Hier ist ein interessantes Bild, das zeigt, wie alles in der Realität zusammenhängt:

5.4 Beliebte Einstellungen

Um Ihnen das Leben zu erleichtern, finden Sie hier eine vollständige Liste verschiedener Einstellungen:

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 unterstützt mehr Funktionen als MySQL 5.0. Wenn Sie also möchten, dass Hibernate alle Funktionen optimal nutzt, geben Sie den richtigen Dialekt an.

Die H2-Datenbank wird normalerweise im Speicher gespeichert, ebenso mem:testwie der Name des SQL-Servers und der Name des Schemas, mit dem Sie arbeiten werden.