5.1 Automatisk generering av dataskjemaer
Når du først konfigurerer Hibernate, kan du aktivere mange interessante innstillinger. Jeg tok dem ikke med før, for ikke å spraye. Men på slutten av nivået tenker jeg på noen av dem å fortelle.
Den første slike innstillingen er hbm2ddl.auto
. Den kan ha 5 forskjellige verdier:
validere | Validering: Hibernate vil sjekke om kolonne- og feltnavnene og -typene samsvarer i databasen og i merknadene. Dette er den vanligste modusen. |
Oppdater | Oppdatering: Hibernate vil oppdatere tabellene i databasen hvis de eller deres kolonner er annerledes enn forventet. |
skape | Gjenopprett: Hibernate vil slette alle tabeller i databasen og gjenskape dem basert på dataene fra merknadene. |
skape-slipp | Oppretting-sletting. I begynnelsen av arbeidet vil Hibernate lage alle tabellene, på slutten av arbeidet vil det slette dem etter seg selv. |
ingen | Hibernate vil ikke gjøre noe i det hele tatt. Hvis et sted basen ikke samsvarer med forventningene, vil feil bli kastet under utførelsen av spørringene. |
5.2 Loggeforespørsler
Den andre svært nyttige innstillingen til Hibernate er loggingen av alle forespørslene til databasen: alle forespørsler til databasen dupliseres i konsollen. Dette er en veldig nyttig funksjon hvis du gjør endringer i Hibernate-relatert kode.
Først vil du bedre forstå hvordan spørringene dine konverteres til SQL. For det andre er det enklere og tidligere vil du kunne finne feil. Og det vil de definitivt. Hibernate fungerer ikke alltid slik vi forventer. Dette er spesielt ofte forbundet med merknader: du forstår dem på din egen måte, og dvale på din egen måte.
Innstillingen som aktiverer logging kalles hibernate.show_sql
. Hvis du setter verdien til true, vil spørringer til databasen bli skrevet til konsollen. Parameteren brukes også i forbindelse med den hibernate.format_sql
, som lar deg angi et praktisk SQL-spørringsformat i loggen.
En annen måte å logge forespørsler til databasen på er å bruke standard logger . Alt ga i det faktum at Hibernate allerede skriver sine spørringer til standardloggeren, men bare med omfanget - DEBUG. Du må endre to egenskaper i standardloggeren din:
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace
Hvis du endrer nivået til BasicBinder til trace
, vil spørringsparametere legges til oss, men i en litt uvanlig form - sekvensiell oppregning etter selve spørringen.
Den tredje tilnærmingen er å bruke en spesiell proxy-driver for databasen .
For eksempel log4jdbc
eller p6spy
. Begge fullmaktene fungerer og har startere, selv om log4jdbc
det i skrivende stund ikke var noen commits på lenge.
<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>
Jeg vil ikke gå inn på detaljer, jeg vil bare at du skal vite at dette er mulig.
5.3 SQL-dialekter
Og litt mer bakgrunnsinformasjon.
Hibernate støtter et veldig stort antall DBMS-er. Hver av dem implementerer et standardsett med SQL-funksjoner og noen flere av sine egne. Eller forskjellige versjoner av SQL. Derfor, for å jobbe med disse DBMSene, må du fortelle Hibernate hvilken dialekt av SQL-språket du skal bruke.
Her er en liste over de mest populære dialektene:
PostgreSQL | org.hibernate.dialect.PostgreSQLDialect |
SAP DB | org.hibernate.dialect.SAPDBDialekt |
Sybase | org.hibernate.dialect.SybaseDialect |
Informix | org.hibernate.dialect.InformixDialect |
Microsoft SQL Server 2008 | org.hibernate.dialect.SQLServer2008Dialect |
MySQL | org.hibernate.dialect.MySQLDialect |
Oracle (hvilken som helst versjon) | org.hibernate.dialect.OracleDialect |
Oracle 11g | org.hibernate.dialect.Oracle10gDialect |
Selvfølgelig kan det være en rekke slike dialekter. Du kan skrive din egen DBMS og din egen dialekt for den.
Hvorfor er det viktig å angi riktig dialekt?
Hver database kan ha litt forskjellige datatyper. Derfor, for at Hibernate skal fungere perfekt akkurat slik du forventer av det, må du fortelle det hvilken dialekt av SQL-språket det må bruke.
Her er et interessant bilde som viser hvordan alt henger sammen i virkeligheten:

5.4 Populære innstillinger
For å gjøre livet ditt enklere, her er en komplett liste over flere innstillinger:
MySQL 8.0 |
---|
|
MySQL 5.0 |
---|
|
PostgreSQL |
---|
|
MySQL 8.0 støtter flere funksjoner enn MySQL 5.0, så hvis du vil at Hibernate skal få mest mulig ut av dem alle, spesifiser riktig dialekt.
H2-databasen er vanligvis lagret i minnet, det samme mem:test
er både navnet på SQL-serveren og navnet på skjemaet du skal jobbe med.
GO TO FULL VERSION