5.1 Automatisk generering af dataskemaer
Når du først konfigurerer Hibernate, kan du aktivere en masse interessante indstillinger. Jeg har ikke taget dem med før, for ikke at sprøjte. Men i slutningen af niveauet tænker jeg på nogle af dem at fortælle.
Den første sådanne indstilling er hbm2ddl.auto
. Det kan have 5 forskellige værdier:
validere | Validering: Hibernate vil kontrollere, om kolonne- og feltnavnene og -typerne stemmer overens i databasen og i annoteringerne. Dette er den mest almindelige tilstand. |
opdatering | Opdatering: Hibernate vil opdatere tabellerne i databasen, hvis de eller deres kolonner er anderledes end forventet. |
skab | Genopret: Dvale vil slette alle tabeller i databasen og genskabe dem baseret på dataene fra annoteringerne. |
skabe-drop | Oprettelse-sletning. I begyndelsen af arbejdet vil Hibernate oprette alle tabellerne, i slutningen af arbejdet vil den slette dem efter sig selv. |
ingen | Hibernate vil ikke gøre noget som helst. Hvis basen et eller andet sted ikke svarer til forventningen, vil der blive kastet fejl under udførelsen af forespørgsler. |
5.2 Logningsanmodninger
Den anden meget nyttige indstilling af Hibernate er logningen af alle dens anmodninger til databasen: alle anmodninger til databasen duplikeres i konsollen. Dette er en meget nyttig funktion, hvis du laver ændringer i Hibernate-relateret kode.
Først vil du bedre forstå, hvordan dine forespørgsler konverteres til SQL. For det andet er det nemmere og tidligere vil du kunne finde fejl. Og det vil de helt sikkert. Hibernate fungerer ikke altid, som vi forventer. Dette er især ofte forbundet med annoteringer: du forstår dem på din egen måde, og dvale på din egen måde.
Indstillingen, der aktiverer logning, kaldes hibernate.show_sql
. Hvis du indstiller dens værdi til sand, vil forespørgsler til databasen blive skrevet til konsollen. Parameteren bruges også i forbindelse med den hibernate.format_sql
, som giver dig mulighed for at indstille et praktisk SQL-forespørgselsformat i loggen.
En anden måde at logge anmodninger til databasen på er at bruge standardloggeren . Alt gav i det faktum, at Hibernate allerede skriver sine forespørgsler til standardloggeren, men kun med omfanget - DEBUG. Du skal ændre to egenskaber i din standardlogger:
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace
Ændring af niveauet af BasicBinder til trace
vil tilføje forespørgselsparametre til os, dog i en lidt usædvanlig form - sekventiel opregning efter selve forespørgslen.
Den tredje fremgangsmåde er at bruge en speciel proxy-driver til databasen .
For eksempel log4jdbc
eller p6spy
. Begge fuldmagter virker og har startere, selvom log4jdbc
der ikke var nogen commits i lang tid i skrivende stund.
<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å i detaljer, jeg vil bare have dig til at vide, at dette er muligt.
5.3 SQL-dialekter
Og lidt mere baggrundsinformation.
Hibernate understøtter et meget stort antal DBMS'er. Hver af dem implementerer et standardsæt af SQL-funktioner og nogle flere af deres egne. Eller forskellige versioner af SQL. For at arbejde med disse DBMS skal du derfor fortælle Hibernate, hvilken dialekt af SQL-sproget du skal bruge.
Her er en liste over de mest populære dialekter:
PostgreSQL | org.hibernate.dialect.PostgreSQLDialect |
SAP DB | 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 (enhver version) | org.hibernate.dialect.OracleDialect |
Oracle 11g | org.hibernate.dialect.Oracle10gDialect |
Selvfølgelig kan der være et hvilket som helst antal af sådanne dialekter. Du kan skrive dit eget DBMS og din egen dialekt til det.
Hvorfor er det vigtigt at angive den korrekte dialekt?
Hver database kan have lidt forskellige datatyper. Derfor, for at Hibernate fungerer perfekt, præcis som du forventer af det, skal du fortælle det, hvilken dialekt af SQL-sproget det skal bruge.
Her er et interessant billede, der viser, hvordan alt hænger sammen i virkeligheden:

5.4 Populære indstillinger
For at gøre dit liv lettere, er her en komplet liste over flere indstillinger:
MySQL 8.0 |
---|
|
MySQL 5.0 |
---|
|
PostgreSQL |
---|
|
MySQL 8.0 understøtter flere funktioner end MySQL 5.0, så hvis du vil have Hibernate til at få mest muligt ud af dem alle, så angiv den korrekte dialekt.
H2-databasen er normalt gemt i hukommelsen, det samme mem:test
er både navnet på SQL-serveren og navnet på det skema, du skal arbejde med.
GO TO FULL VERSION