5.1 Generación automática de esquemas de datos

Cuando configura Hibernate por primera vez, puede habilitar muchas configuraciones interesantes. No los traje antes, para no rociar. Pero al final del nivel pienso en algunos de ellos para contar.

La primera configuración de este tipo es el hbm2ddl.auto. Puede tener 5 valores diferentes:

validar Validación: Hibernate verificará si los nombres y tipos de columnas y campos coinciden en la base de datos y en las anotaciones. Este es el modo más común.
actualizar Actualizar: Hibernate actualizará las tablas en la base de datos si ellas o sus columnas son diferentes a las esperadas.
crear Recrear: Hibernate eliminará todas las tablas de la base de datos y las recreará en función de los datos de las anotaciones.
crear-soltar Creación-supresión. Al comienzo del trabajo, Hibernate creará todas las tablas, al final del trabajo, las eliminará después de sí mismo.
ninguno Hibernate no hará nada en absoluto. Si en algún lugar la base no coincide con la expectativa, se generarán errores durante la ejecución de las consultas.

5.2 Solicitudes de registro

La segunda configuración muy útil de Hibernate es el registro de todas sus solicitudes a la base de datos: todas las solicitudes a la base de datos se duplican en la consola. Esta es una función muy útil si está realizando cambios en el código relacionado con Hibernate.

Primero, comprenderá mejor cómo se convierten sus consultas a SQL. En segundo lugar, es más fácil y antes podrá encontrar errores. Y definitivamente lo harán. Hibernate no siempre funciona como esperamos. Esto se asocia especialmente a menudo con las anotaciones: las entiendes a tu manera e Hibernate a tu manera.

La configuración que habilita el registro se llama hibernate.show_sql. Si establece su valor en verdadero, las consultas a la base de datos se escribirán en la consola. El parámetro también se usa junto con él hibernate.format_sql, lo que le permite establecer un formato de consulta SQL conveniente en el registro.

Otra forma de registrar solicitudes en la base de datos es utilizar el registrador estándar . Todo dio en el hecho de que Hibernate ya escribe sus consultas en el registrador estándar, pero solo con el alcance - DEBUG. Debe cambiar dos propiedades en su registrador estándar:

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

Cambiar el nivel de BasicBinder a tracenos agregará parámetros de consulta, sin embargo, en una forma un poco inusual: enumeración secuencial después de la consulta en sí.

El tercer enfoque consiste en utilizar un controlador de proxy especial para la base de datos .

Por ejemplo, log4jdbco p6spy. Ambos proxies funcionan y tienen iniciadores, aunque log4jdbcno hubo confirmaciones durante mucho tiempo en el momento de escribir este artículo.


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

No voy a entrar en detalles, solo quiero que sepas que esto es posible.

5.3 Dialectos SQL

Y algo más de información de fondo.

Hibernate admite una gran cantidad de DBMS. Cada uno de ellos implementa un conjunto estándar de funciones SQL y algunas más propias. O diferentes versiones de SQL. Por lo tanto, para trabajar con estos DBMS, debe decirle a Hibernate qué dialecto del lenguaje SQL usar.

Aquí hay una lista de los dialectos más populares:

postgresql org.hibernate.dialect.PostgreSQLDialect
Base de datos SAP 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 (cualquier versión) org.hibernate.dialect.OracleDialect
oráculo 11g org.hibernate.dialect.Oracle10gDialect

Por supuesto, puede haber cualquier número de tales dialectos. Puede escribir su propio DBMS y su propio dialecto para él.

¿Por qué es importante especificar el dialecto correcto?

Cada base de datos puede tener tipos de datos ligeramente diferentes. Por lo tanto, para que Hibernate funcione exactamente de la manera que espera de él, debe decirle qué dialecto del lenguaje SQL necesita usar.

Aquí hay una imagen interesante que muestra cómo todo está conectado en la realidad:

5.4 Configuraciones populares

Para hacer su vida más fácil, aquí hay una lista completa de varias configuraciones:

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 admite más funciones que MySQL 5.0, por lo que si desea que Hibernate las aproveche al máximo, especifique el dialecto correcto.

La base de datos H2 generalmente se almacena en la memoria, al igual mem:testque el nombre del servidor SQL y el nombre del esquema con el que trabajará.