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 trace
uns 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 log4jdbc
oder p6spy
. Beide Proxys funktionieren und verfügen über Starter, obwohl log4jdbc
es 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 |
---|
|
MySQL 5.0 |
---|
|
PostgreSQL |
---|
|
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:test
wie der Name des SQL-Servers und der Name des Schemas, mit dem Sie arbeiten werden.
GO TO FULL VERSION