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 trace
ci 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, log4jdbc
o p6spy
. Entrambi i proxy funzionano e hanno avviatori, sebbene log4jdbc
non 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 |
---|
|
MySQL 5.0 |
---|
|
PostgreSQL |
---|
|
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:test
come il nome del server SQL e il nome dello schema con cui lavorerai.
GO TO FULL VERSION