5.1 Generazione automatica dello schema dei dati

Quando si configura Hibernate per la prima volta, è possibile abilitare molte impostazioni interessanti. Non li ho portati prima, per non spruzzare. Ma alla fine del livello penso ad alcuni di loro da raccontare.

La prima impostazione di questo tipo è hbm2ddl.auto. Può avere 5 diversi valori:

convalidare Convalida: Hibernate verificherà se i nomi e i tipi di colonne e campi corrispondono nel database e nelle annotazioni. Questa è la modalità più comune.
aggiornamento Aggiornamento: Hibernate aggiornerà le tabelle nel database se esse o le loro colonne sono diverse dal previsto.
creare Ricrea: Hibernate eliminerà tutte le tabelle nel database e le ricreerà in base ai dati delle annotazioni.
crea-rilascia Creazione-cancellazione. All'inizio del lavoro, Hibernate creerà tutte le tabelle, alla fine del lavoro le cancellerà dopo se stesso.
nessuno Hibernate non farà nulla. Se da qualche parte la base non corrisponde alle aspettative, verranno generati errori durante l'esecuzione delle query.

5.2 Richieste di registrazione

La seconda impostazione molto utile di Hibernate è la registrazione di tutte le sue richieste al database: tutte le richieste al database vengono duplicate nella console. Questa è una funzionalità molto utile se stai apportando modifiche al codice relativo a Hibernate.

Innanzitutto, capirai meglio come le tue query vengono convertite in SQL. In secondo luogo, è più facile e prima sarai in grado di trovare errori. E lo faranno sicuramente. L'ibernazione non funziona sempre come ci aspettiamo. Questo è particolarmente spesso associato alle annotazioni: le capisci a modo tuo e Hibernate a modo tuo.

L'impostazione che abilita la registrazione è chiamata hibernate.show_sql. Se ne imposti il ​​valore su true, le query al database verranno scritte nella console. Il parametro viene utilizzato anche in combinazione con esso hibernate.format_sql, che consente di impostare un comodo formato di query SQL nel registro.

Un altro modo per registrare le richieste nel database consiste nell'utilizzare il logger standard . Tutto ha dato nel fatto che Hibernate scrive già le sue query al logger standard, ma solo con l'ambito - DEBUG. Devi modificare due proprietà nel tuo logger standard:

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

La modifica del livello di BasicBinder in traceci aggiungerà i parametri della query, tuttavia, in una forma leggermente insolita: l'enumerazione sequenziale dopo la query stessa.

Il terzo approccio consiste nell'utilizzare uno speciale driver proxy per il database .

Ad esempio, log4jdbco p6spy. Entrambi i proxy funzionano e hanno avviatori, sebbene log4jdbcnon ci fossero commit da molto tempo al momento della scrittura.


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

Non entrerò nei dettagli, voglio solo che tu sappia che questo è possibile.

5.3 Dialetti SQL

E qualche altra informazione di base.

Hibernate supporta un numero molto elevato di DBMS. Ciascuno di essi implementa un set standard di funzioni SQL e alcune altre proprie. O diverse versioni di SQL. Pertanto, per lavorare con questi DBMS, è necessario indicare a Hibernate quale dialetto del linguaggio SQL utilizzare.

Ecco un elenco dei dialetti più popolari:

PostgreSQL org.hibernate.dialect.PostgreSQLDialect
DB SAP org.hibernate.dialect.SAPDBDialect
Sybase org.hibernate.dialect.SybaseDialect
Informix org.hibernate.dialect.InformixDialect
MicrosoftSql Server 2008 org.hibernate.dialect.SQLServer2008Dialect
MySQL org.hibernate.dialect.MySQLDialect
Oracle (qualsiasi versione) org.hibernate.dialect.OracleDialect
Oracle 11g org.hibernate.dialect.Oracle10gDialect

Naturalmente, ci può essere un numero qualsiasi di tali dialetti. Puoi scrivere il tuo DBMS e il tuo dialetto per esso.

Perché è importante specificare il dialetto corretto?

Ogni database può avere tipi di dati leggermente diversi. Pertanto, affinché Hibernate funzioni perfettamente esattamente come ci si aspetta da esso, è necessario dirgli quale dialetto del linguaggio SQL deve utilizzare.

Ecco un'immagine interessante che mostra come tutto sia collegato nella realtà:

5.4 Impostazioni popolari

Per semplificarti la vita, ecco un elenco completo di diverse impostazioni:

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 supporta più funzionalità rispetto a MySQL 5.0, quindi se desideri che Hibernate le sfrutti al massimo, specifica il dialetto corretto.

Il database H2 è solitamente archiviato in memoria, così mem:testcome il nome del server SQL e il nome dello schema con cui lavorerai.