5.1 Génération automatique du schéma de données

Lorsque vous configurez Hibernate pour la première fois, vous pouvez activer de nombreux paramètres intéressants. Je ne les ai pas apportés avant, pour ne pas pulvériser. Mais à la fin du niveau je pense à certains d'entre eux à raconter.

Le premier paramètre de ce type est le hbm2ddl.auto. Il peut prendre 5 valeurs différentes :

valider Validation : Hibernate vérifiera si les noms et types de colonnes et de champs correspondent dans la base de données et dans les annotations. C'est le mode le plus courant.
mise à jour Mise à jour : Hibernate mettra à jour les tables de la base de données si elles ou leurs colonnes sont différentes de celles attendues.
créer Recréer : Hibernate supprimera toutes les tables de la base de données et les recréera en fonction des données des annotations.
créer-déposer Création-suppression. Au début du travail, Hibernate créera toutes les tables, à la fin du travail, il les supprimera après lui.
aucun Hibernate ne fera rien du tout. Si quelque part la base ne correspond pas à l'attente, des erreurs seront générées lors de l'exécution des requêtes.

5.2 Requêtes de journalisation

Le deuxième paramètre très utile d'Hibernate est la journalisation de toutes ses requêtes vers la base de données : toutes les requêtes vers la base de données sont dupliquées dans la console. C'est une fonctionnalité très utile si vous apportez des modifications au code lié à Hibernate.

Dans un premier temps, vous comprendrez mieux comment vos requêtes sont converties en SQL. Deuxièmement, c'est plus facile et plus tôt vous pourrez trouver des erreurs. Et ils le feront certainement. Hibernate ne fonctionne pas toujours comme prévu. Ceci est particulièrement souvent associé aux annotations : vous les comprenez à votre manière et Hibernate à votre manière.

Le paramètre qui active la journalisation est appelé hibernate.show_sql. Si vous définissez sa valeur sur true, les requêtes adressées à la base de données seront écrites sur la console. Le paramètre est également utilisé conjointement avec lui hibernate.format_sql, ce qui vous permet de définir un format de requête SQL pratique dans le journal.

Une autre façon de consigner les requêtes dans la base de données consiste à utiliser le journaliseur standard . Tout a donné le fait qu'Hibernate écrit déjà ses requêtes dans l'enregistreur standard, mais uniquement avec la portée - DEBUG. Vous devez modifier deux propriétés dans votre logger standard :

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

Changer le niveau de BasicBinder en tracenous ajoutera des paramètres de requête, cependant, sous une forme légèrement inhabituelle - une énumération séquentielle après la requête elle-même.

La troisième approche consiste à utiliser un pilote proxy spécial pour la base de données .

Par exemple, log4jdbcou p6spy. Les deux proxys fonctionnent et ont des démarreurs, bien qu'il log4jdbcn'y ait eu aucun commit depuis longtemps au moment de la rédaction.


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

Je ne vais pas entrer dans les détails, je veux juste que vous sachiez que c'est possible.

5.3 Dialectes SQL

Et quelques informations de fond supplémentaires.

Hibernate supporte un très grand nombre de SGBD. Chacun d'eux implémente un ensemble standard de fonctions SQL et d'autres qui leur sont propres. Ou différentes versions de SQL. Par conséquent, pour travailler avec ces SGBD, vous devez indiquer à Hibernate quel dialecte du langage SQL utiliser.

Voici une liste des dialectes les plus populaires :

PostgreSQLName org.hibernate.dialect.PostgreSQLDialect
BD SAP org.hibernate.dialect.SAPDBDialect
SybaseName org.hibernate.dialect.SybaseDialect
Informix org.hibernate.dialect.InformixDialect
Microsoft SQL Server 2008 org.hibernate.dialect.SQLServer2008Dialect
MySQL org.hibernate.dialect.MySQLDialect
Oracle (toute version) org.hibernate.dialect.OracleDialect
Oracle 11g org.hibernate.dialect.Oracle10gDialect

Bien sûr, il peut y avoir n'importe quel nombre de ces dialectes. Vous pouvez écrire votre propre SGBD et votre propre dialecte pour cela.

Pourquoi est-il important de spécifier le dialecte correct ?

Chaque base de données peut avoir des types de données légèrement différents. Par conséquent, pour qu'Hibernate fonctionne parfaitement exactement comme vous l'attendez, vous devez lui indiquer quel dialecte du langage SQL il doit utiliser.

Voici une image intéressante qui montre comment tout est connecté dans la réalité :

5.4 Paramètres populaires

Pour vous faciliter la vie, voici une liste complète de plusieurs réglages :

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
PostgreSQLName
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 prend en charge plus de fonctionnalités que MySQL 5.0, donc si vous voulez qu'Hibernate en tire le meilleur parti, spécifiez le bon dialecte.

La base de données H2 est généralement stockée en mémoire, tout comme mem:testle nom du serveur SQL et le nom du schéma avec lequel vous allez travailler.