background image

Konfiguracja Hibernate

Rafał Kasprzyk

background image

Rafał Kasprzyk

Konfiguracja Hibernate

Na poziomie aplikacji za odwzorowanie obiektów 

trwałych na tabele w relacyjnej bazie danych 

odpowiada obiekt klasy 

org.hibernate.cfg.Configuration

Parametry konfiguracyjne są ustawiane programowo 

poprzez obiekt Configuration lub definiowane w 

tekstowym pliku hibernate.properties

Odwzorowania klas na tabele są definiowane w 

plikach *.hbm.xml

Configuration cfg = new Configuration();
cfg.setProperty( ”hibernate.connection.url”, 

”jdbc:hsqldb:.”);
cfg.setProperty(…);
cfg.addResource(User.hbm.xml);

Alternatywnym i najczęściej stosowanym sposobem 

konfiguracji Hibernate jest wykorzystanie pliku w 

formacie XML: hibernate.cfg.xml

background image

Rafał Kasprzyk

Plik hibernate.cfg.xml

Pozwala na pełną konfigurację Hibernate

Definiuje parametry konfiguracyjne

W przypadku istnienia pliku hibernate.properties 

nadpisuje parametry w nim zdefiniowane

Wskazuje pliki z odwzorowaniami klas na 

tabele

<hibernate-configuration>

<session-factory>

<!--properties-->

<property name="dialect">

org.hibernate.dialect.HSQLDialect</property>

<property 

name="connection.url">jdbc:hsqldb:.</propery>

<--mapping files-->

<mapping 

resource="pl/isolution/hibernate/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

background image

Rafał Kasprzyk

Wykorzystanie dialektu SQL

Wykorzystywany dialekt SQL 

wskazywany jest w pliku 

hibernate.cfg.xml lub 

hibernate.properties

Wskazanie dialektu SQL wykorzystywanego 

przez zastosowany serwer bazy danych 

istotnie upraszcza konfigurację

Wielu opcjonalnym parametrom Hibernate 

zostają nadane właściwe wartości 

domyślne

Klasy do obsługi dialektu SQL znajdują 

się w pakiecie org.hibernate.dialect

background image

Rafał Kasprzyk

Klasy do obsługi dialektu SQL

Niektóre klasy do obsługi dialektu 

SQL:

MySQL:

MySQLDialect

PostgreSQL:

PostgreSQLDialect

HypersonicSQL: HSQLDialect

Firebird:

FirebirdDialect

Oracle:

OracleDialect

DB2:

DB2Dialect

 …

background image

Rafał Kasprzyk

Połączenie z bazą poprzez 

DriverManager

<hibernate-configuration>

<session-factory>

<!--properties-->

<property 

name="connection.driver_class">

org.hsqldb.jdbcDriver</property>

<property 

name="connection.url">jdbc:hsqldb:.</property>

<property 

name="connection.username">admin</property>

<property name="connection.password">isol</property>

<property name="dialect">
org.hibernate.dialect.HSQLDialect</property>
<--mapping files-->
<mapping 

resource="pl/isolution/hibernate/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

hibernate.cf
g.xml

background image

Rafał Kasprzyk

Połączenie z bazą poprzez 

DataSource

Rozwiązanie stosowane w przypadku 

wykorzystywania środowisk zarządzanych 

(serwery aplikacji)

<hibernate-configuration>

<session-factory>

<!--properties-->

<property name="connection.datasource">

jdbc/hsqldb</property>

<property name="connection.username">admin</property>

<property name="connection.password">isol</property>

<property name="dialect">

org.hibernate.dialect.HSQLDialect</property>

<--mapping files-->

<mapping 

resource="pl/isolution/hibernate/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

hibernate.cf
g.xml

background image

Rafał Kasprzyk

 Przykład pliku hibernate.cfg.xml

 <?xml version='1.0' encoding='utf-8'?>

 <!DOCTYPE hibernate-configuration 

PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-

3.0.dtd">

 <hibernate-configuration>

<session-factory>

<property name="connection.driver_class">

org.hsqldb.jdbcDriver</property>

<property name="connection.url">jdbc:hsqldb:.</property>

<property name="connection.username">admin</property>

<property name="connection.password">isol</property>

<property name="connection.pool_size">1</property>

<property name="dialect">

org.hibernate.dialect.HSQLDialect</property>

<property 

name="current_session_context_class">thread</property>

<property name="cache.provider_class">

org.hibernate.cache.NoCacheProvider</property>

<property name="show_sql">true</property>

<property name="hbm2ddl.auto">create</property>

<mapping resource="pl/isolution/hibernate/User.hbm.xml"/>

</session-factory>

 </hibernate-configuration> 

hibernate.cf
g.xml

background image

Rafał Kasprzyk

Pliki mapować jako element 

konfiguracji

Definiowane w plikach *.hbm.xml, które 

można tworzyć ręcznie lub z 

wykorzystaniem generatorów

Inżynieria w przód

Generacja odwzorowania z POJO (np.XDoclet)

Inżynieria wstecz

Adaptacja istniejącego schematu bazy danych

Pliki opisujące odwzorowanie wskazywane 

są w pliku hibernate.cfg.xml

<hibernate-configuration>

<session-factory>

<--mapping files-->

<mapping resource="pl/isolution/hibernate/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

hibernate.cf
g.xml

background image

Rafał Kasprzyk

Współbieżność

Poziom izolacji

Domyślnie Hibernate dostosowuje się 

do poziomu izolacji ustawionego dla 

bazy danych

Poziom izolacji można ustawić jawnie 

za pomocą opcji 

hibernate.connection.isolation

Możliwe wartości 1, 2, 4, 8

Dwupoziomowy cache

Poziom sesji

Poziom fabryki sesji

background image

Rafał Kasprzyk

Współbieżność

Blokowanie

Domyślnie Hibernate stosuje 

blokowanie optymistyczne z 

wersjonowaniem

Dla pełnego bezpieczeństwa wymagane 

jest utworzenie w każdej tabeli kolumny 

version/timestamp

W przypadku braku dodatkowych kolumn 

blokowanie optymistyczne z 

wersjonowaniem działa prawidłowo tylko w 

ramach danej sesji

Problemy w przypadku obiektów odłączonych

Można zlecić jawne blokowanie 

pesymistyczne dla konkretnych operacji 

odczytu z bazy danych (session.get())

background image

Rafał Kasprzyk

Podsumowanie

Pliki konfiguracyjne

Obsługa dialektu SQL

Połącznie z bazą danych

DriverManager

DataSource

Przykład konfiguracji Hibernate

Pliki mapowań jako element 

konfiguracji

Współbieżność w Hibernate


Document Outline