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 log4jdbceller p6spy. Begge fullmaktene fungerer og har startere, selv om log4jdbcdet 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
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 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:tester både navnet på SQL-serveren og navnet på skjemaet du skal jobbe med.