Konfiguracja Hibernate
Rafał Kasprzyk
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
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>
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
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
…
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
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
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
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
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
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())
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