JDBC-forbindelse og dialektkonfiguration i Hibernate
For at forbinde dit persistenslag til din database skal du konfigurere en datakilde eller angive JDBC-forbindelsesdriveren, URL-adressen og loginoplysningerne til Hibernate direkte. Derudover skal Hibernate kende den databasespecifikke dialekt, den skal bruge til at generere SQL-sætningerne. Hibernate kan detektere dialekten baseret på den konfigurerede JDBC-forbindelse, eller du kan angive den som en konfigurationsparameter.
Du kan indstille alle disse oplysninger i persistence.xml eller, hvis du bruger Spring Data JPA, i filen application.properties. I de følgende afsnit vil jeg kort forklare de forskellige konfigurationsparametre, før jeg giver dig eksempler på konfigurationer til de mest almindeligt anvendte RDBMS.
Konfigurationsparametre
Datakilde
Hvis du bruger en forbindelsespulje, kan du henvise til dens JNDI-navn som en JTA-datakilde, hvis den er kompatibel med Java Transaction API, eller som en ikke-JTA-datakilde.
<persistence> <! – Define persistence unit – > <persistence-unit name="my-persistence-unit"> <jta-data-source>java:app/jdbc/MyDataSource</jta-data-source> </persistence-unit> </persistence>
Forbindelsen til databasen er allerede konfigureret i forbindelsespuljen. Derfor behøver du ikke indstille JDBC-driveren, URL-adressen og brugeroplysningerne i din Hibernate-konfiguration. Men du vil måske konfigurere dialekten.
JDBC-forbindelse
Du kan bruge følgende konfigurationsparametre til at konfigurere JDBC-forbindelsen i Hibernate:
- javax.persistence.jdbc.driver – Det fuldt kvalificerede klassenavn på din JDBC-driver
- javax.persistence.jdbc.url – Forbindelses-URL'en til din database
- javax.persistence.jdbc.user – Brugernavnet til at logge på din database
- javax.persistence.jdbc.password – Adgangskoden til at logge på din database
I det følgende konfigurationsstykke bruger jeg disse parametre til at oprette forbindelse til PostgreSQL-databasen jpaForBeginners på localhost ved hjælp af postgres som brugernavn og adgangskode.
<persistence> <persistence-unit name="my-persistence-unit"> <properties> <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/jpaForBeginners" /> <property name="javax.persistence.jdbc.user" value="postgres" /> <property name="javax.persistence.jdbc.password" value="postgres" /> </properties> </persistence-unit> </persistence>
Dvaledialekt
Hibernate bruger dialekter til at tilpasse sig funktionssæt og syntaktiske forskelle i de forskellige understøttede RDBMS. For eksempel definerer en dialekt, hvilke funktioner der understøttes, hvordan datatyper skal kortlægges, og hvis Hibernate som standard skal bruge en sekvens eller en automatisk inkrementeret databasekolonne til at generere primærnøgleværdier.
Hibernate giver et stort sæt dialektimplementeringer til at understøtte forskellige versioner af populære RDBMS. Du kan finde dem i pakken org.hibernate.dialect . Du kan angive den dialekt, du vil bruge, ved at indstille det fuldt kvalificerede klassenavn for dens implementering som org.hibernate.dialect.Dialect konfigurationsegenskab.
Hvis du kun skal understøtte 1 RDBMS, anbefaler jeg at indstille denne konfigurationsparameter, selvom Hibernate automatisk kan registrere dialekten baseret på den konfigurerede JDBC-forbindelse.
Konfigurationsværdier for almindeligt anvendte databaser
Her er en liste over eksempler på konfigurationer for de mest almindeligt anvendte databaser i alfabetisk rækkefølge. Alle disse konfigurationer forbinder til jpaForBeginners database, der kører på standardporten på localhost. Ud over den medfølgende konfiguration skal du også indstille brugernavnet og adgangskoden.
CockroachDB
Som forklaret i en tidligere artikel tilføjede Hibernate 5.4.19 en CockroachDB-dialekt. På JDBC-niveau bruger den stadig PostgreSQL-driveren.
javax.persistence.jdbc.driver = org.postgresql.Driver javax.persistence.jdbc.url = jdbc:postgresql://localhost:26257/jpaForBeginners?sslmode=disable org.hibernate.dialect.Dialect = org.hibernate.dialect.CockroachDB201Dialect
Derby
javax.persistence.jdbc.driver = org.apache.derby.jdbc.EmbeddedDriver javax.persistence.jdbc.url = jdbc:derby:target/tmp/derby/jfb;databaseName=jpaForBeginners;create=true org.hibernate.dialect.Dialect = org.hibernate.dialect.DerbyTenSevenDialect
Db2 Express-C
javax.persistence.jdbc.driver = com.ibm.db2.jcc.DB2Driver javax.persistence.jdbc.url = jdbc:db2://localhost/jpaForBeginners org.hibernate.dialect.Dialect = org.hibernate.dialect.DB297Dialect
Ildfugl
javax.persistence.jdbc.driver = org.firebirdsql.jdbc.FBDriver javax.persistence.jdbc.url = jdbc:firebirdsql://localhost:3050/c:/wrk/myProject/db/jpaForBeginners.fdb org.hibernate.dialect.Dialect = org.hibernate.dialect.FirebirdDialect
H2
javax.persistence.jdbc.driver = org.hsqldb.jdbc.JDBCDriver javax.persistence.jdbc.url = jdbc:h2:mem:jpaForBeginners org.hibernate.dialect.Dialect = org.hibernate.dialect.H2Dialect
HSQLDB
javax.persistence.jdbc.driver = org.hsqldb.jdbc.JDBCDriver javax.persistence.jdbc.url = jdbc:hsqldb:mem:jpaForBeginners org.hibernate.dialect.Dialect = org.hibernate.dialect.HSQLDialect
Informix
javax.persistence.jdbc.driver = com.informix.jdbc.IfxDriver javax.persistence.jdbc.url = jdbc:informix-sqli://localhost:9088/sysuser:INFORMIXSERVER=jpaForBeginners org.hibernate.dialect.Dialect = org.hibernate.dialect.Informix10Dialect
MariaDB
javax.persistence.jdbc.driver = org.mariadb.jdbc.Driver javax.persistence.jdbc.url = jdbc:mariadb://localhost/jpaForBeginners org.hibernate.dialect.Dialect = org.hibernate.dialect.MariaDB103Dialect
MySQL
MySQL er en populær open source-database, der tilbyder nogle interessante proprietære funktioner, men som også introducerer nogle begrænsninger. Jeg forklarer alt dette meget detaljeret i 5 ting, du behøver at vide, når du bruger Hibernate med Mysql.
javax.persistence.jdbc.driver = com.mysql.jdbc.Driver javax.persistence.jdbc.url = jdbc:mysql://localhost/jpaForBeginners org.hibernate.dialect.Dialect = org.hibernate.dialect.MySQL8Dialect
Oracle
javax.persistence.jdbc.driver = oracle.jdbc.OracleDriver javax.persistence.jdbc.url = jdbc:oracle:thin:@localhost:1521:jpaForBeginners org.hibernate.dialect.Dialect = org.hibernate.dialect.Oracle12cDialect
PostgreSQL
PostgreSQL er en funktionsrig, open source-database. Jeg forklarede, hvordan du får mest muligt ud af det og bruger nogle af dets mest interessante proprietære funktioner i Hibernate med PostgreSQL – 6 ting, du skal vide.
javax.persistence.jdbc.driver = org.postgresql.Driver javax.persistence.jdbc.url = jdbc:postgresql://localhost/jpaForBeginners org.hibernate.dialect.Dialect = org.hibernate.dialect.PostgreSQL95Dialect
SAP HANA
javax.persistence.jdbc.driver = com.sap.db.jdbc.Driver javax.persistence.jdbc.url = jdbc:sap://localhost/jpaForBeginners org.hibernate.dialect.Dialect = org.hibernate.dialect.HANAColumnStoreDialect
SQL-server
javax.persistence.jdbc.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver javax.persistence.jdbc.url = jdbc:sqlserver://localhost;instance=SQLEXPRESS;databaseName=jpaForBeginners org.hibernate.dialect.Dialect = org.hibernate.dialect.SQLServer2012Dialect