Hibernate est un outil ORM (ObjectRelational Mapping) open source pour Java
Ce cours est un rapide survol de ses
possibilits
Introduction Hibernate
Universit de Nice Sophia-Antipolis
Version O 0.5 23/10/05
Richard Grin
R. Grin
Outil ORM
Automatise ou facilite la correspondance
entre des donnes stockes dans des objets
et une base de donnes relationnelle
Le plus souvent les donnes sont dcrites
dans des fichiers de configuration (souvent
XML)
Les principaux produits : TopLink dOracle
(commercial) et Hibernate (open source)
R. Grin
R. Grin
page 3
Recherche et enregistre les donnes
associes un objet dans une base de
donnes
Dtecte quand un objet a t modifi et
lenregistre en optimisant les accs la base
Avantages
Hibernate
page 4
Avantages
vite lcriture de code rptitif, inintressant
et source derreurs difficiles dceler
Gain de 30 40 % du nombre de lignes de
certains projets
Amliore la portabilit du code pour des
changements de SGBD
R. Grin
R. Grin
Hibernate
page 2
Fonctionnalits de base
Hibernate
Hibernate
page 5
Le dveloppeur pense en termes dobjet et
pas en termes de lignes de tables
Sans outil ORM le dveloppeur peut hsiter
concevoir un modle objet fin afin dviter
du codage complexe pour la persistance
Le refactoring du schma de la base de
donnes ou du modle objet est facilit
Hibernate
page 6
Pas toujours bnfique
Un type dapplications ne bnficie pas de
lutilisation dun outil ORM : celles qui
modifient un grand nombre de lignes pour
chaque update ou qui ne comportent
essentiellement que des requtes select de
type group by
En effet, en ce cas la manipulation dun grand
nombre dobjets nuit aux performances
Par exemple les applications OLAP (online
analytical processing), le data mining
R. Grin
Hibernate
page 7
Les classes persistantes
dans Hibernate
R. Grin
Hibernate
page 8
Contraintes obligatoires pour les
classes persistantes
Persistance pour POJOs
Au contraire dautres outils ou framework, les
objets persistants sont des POJOs (Plain Old
Java Objects)
Leur classe na pas besoin dimplmenter
certaines interfaces ou dhriter de certaines
classes
Quelques contraintes sont tout de mme
recommandes ou obligatoires
R. Grin
Hibernate
page 9
Elles doivent avoir un constructeur sans
paramtre (il peut tre priv, mais il est
prfrable quil soit accessible par le
paquetage)
Les collections qui reprsentent des
associations doivent tre types avec des
interfaces et pas des classes ; par exemple
List et pas ArrayList
R. Grin
Hibernate
page 10
Contraintes optionnelles
mais recommandes
Un des champs doit identifier une instance
parmi toutes les autres de la mme classe
Tous les champs qui sont persistants doivent
avoir un modificateur (setter) et un accesseur
(getter) ; ils peuvent tre privs
Les classes ne doivent pas tre final ; les
mthodes public ne doivent pas tre final
R. Grin
Hibernate
page 11
Fichiers de mapping
R. Grin
Hibernate
page 12
Exemple de fichier de mapping
(en-tte)
Fichier de mapping
Dcrit comment se fera la persistance des
objets dune classe
Format XML
Se place dans le mme rpertoire que la
classe et se nomme [Link] si la
classe sappelle Classe
R. Grin
Hibernate
page 13
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD
3.0//EN"
"[Link]
[Link]">
R. Grin
Exemple de fichier de mapping
(suite)
<hibernate-mapping>
<class name="Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="increment"/>
nom accesseurs :
</id>
{get|set}Date
<property name="date"
type="timestamp"
column="EVENT_DATE"/>
<property name="title"/>
</class>
</hibernate-mapping>
R. Grin
Hibernate
page 15
page 14
Attributs du tag property
column indique le nom de la colonne dans la
table relationnelle
Par dfaut, elle a le mme nom que la
proprit (attribut name )
type indique le type Hibernate de la
proprit ; Hibernate en dduit le type SQL et
le type Java
Par dfaut, il est dtermin par introspection
de la classe
R. Grin
Identificateur
Hibernate
page 16
Gnrateur de cls
Le tag id est obligatoire pour chaque classe
qui est reprsente par une table (une classe
composant nest pas reprsente par une
table)
Il indique quelle sera la cl primaire de la
table
Remarque : les sous-classes hritent des
identificateurs de leur classe mre
R. Grin
R. Grin
Hibernate
Hibernate
page 17
Le tag generator, sous-tag de id, indique
comment seront gnres les cls des objets
Le plus souvent les cls sont de type long,
int ou short et nont pas de signification
pour lapplication (une bonne pratique)
Hibernate
page 18
Valeurs pour lattribut class
increment : ne convient que si aucun autre
processus najoute des donnes dans la table
identity, sequence : la cl est une colonne
identity ou est gnre par une squence
hilo : une table contient la prochaine valeur
native : utilise un des moyens ci-dessus,
selon les possibilits du SGBD
R. Grin
Hibernate
page 19
Cls significatives
Bien que les cls significatives ne soient pas
recommandes, ce choix peut tre impos par
les bases de donnes hrites dautres
applications
class="assigned" indique que cest
lapplication qui donnera la valeur la cl
Cest la valeur par dfaut pour lattribut class
R. Grin
Hibernate
page 20
Les diffrents tats
Nouveau : il vient dtre cr dans le code
Java ; il nest pas persistant
Persistant : il a t rendu persistant par
[Link](objet)
ou bien il a t charg depuis la base de
donnes par une requte ([Link]())
Toute modification des proprits de lobjet
sera automatiquement rpercute dans la
base
tats dun objet
R. Grin
Hibernate
page 21
R. Grin
Les diffrents tats
Hibernate
page 22
[Link](objet)
Dtach : il a t persistant mais la session
qui le grait a t ferme ; on peut crer une
autre session et le rattacher cette nouvelle
session (par [Link](objet))
Rend lobjet pass en paramtre persistant
Une commande SQL INSERT ne sera
excute quau moment o la mthode
[Link]() sera lance
Transient : un objet persistant ou dtach
peut tre rendu non persistant par lappel de
[Link](objet)
R. Grin
Hibernate
page 23
R. Grin
Hibernate
page 24
Rcuprer lidentificateur dun objet
persist renvoie un Serializable qui est
lidentificateur utilis pour sauvegarder lobjet
dans la base
Si lidentificateur est un long on peut le
rcuprer par :
Long id =
(Long)[Link](objet);
R. Grin
Hibernate
page 25
Persistance par transitivit
(ou par rfrence)
R. Grin
Le concept
Les objets rfrencs par un objet persistant
sont automatiquement persistants
Ainsi si on rend un objet persistant, tous les
objets rfrencs par cet objet sont rendus
persistants
Cest un comportement logique : un objet ne
serait pas vraiment persistant si une partie
des valeurs de ses proprits ntait pas
persistante
R. Grin
R. Grin
page 27
Quand on rend un objet non persistant, on
risque de supprimer de la base des valeurs
utilises par un autre objet persistant
Donc pratiquement la persistance par
transitivit nest pas si simple mettre en
uvre
Par dfaut, Hibernate neffectue pas de
persistance par transitivit
Pour que les objets associs un objet
persistant deviennent automatiquement
persistants, il faut lindiquer dans le fichier de
mapping de la classe de lobjet persistant
Ce comportement est moins sr mais permet
plus de souplesse, souvent pour obtenir de
meilleures performances
Hibernate
Hibernate
page 28
Attribut cascade
Le choix dHibernate
R. Grin
page 26
Un problme difficile
Hibernate
Hibernate
page 29
Les tags qui dcrivent les associations entre
objets peuvent avoir un attribut cascade qui
indique le comportement dHibernate pour la
persistance par transitivit
Par dfaut, la valeur de lattribut est none :
lobjet ou les objets rfrencs par cette
association ne seront pas rendus persistants
automatiquement par un persist de lobjet
rfrenant
R. Grin
Hibernate
page 30
Possibilits de cascade (1)
Possibilits de cascade (2)
save-update : Hibernate suivra
lassociation lors des appels persist ou
update (persistance automatique des objets
rfrencs)
delete : Hibernate suivra lassociation lors
des appels delete (les objets rfrencs
seront automatiquement rendus non
persistants)
all : les 2 prcdents
R. Grin
R. Grin
Hibernate
page 31
delete-orphan : tout objet associ qui est
retir de lassociation sera rendu non
persistant
all-delete-orphan : comme all et
delete-orphan runis (convient bien si les
objets rfrencs ne peuvent exister en
dehors de lassociation)
Hibernate
page 32
Exemple
Si on suppose quune adresse nexiste pas
sans une personne, et quune personne peut
avoir plusieurs adresses, on aura dans le
fichier de mapping de la classe Personne :
<set name="adresses"
table="ADRESSE"
cascade="all-delete-orphan"
. . .
R. Grin
Hibernate
page 33
Les associations
R. Grin
Une partie complexe
Hibernate
page 34
Types dassociation
Cest la partie la plus complexe si on veut
crire des applications performantes avec
Hibernate
R. Grin
Hibernate
page 35
Uni ou bidirectionnelle
Cardinalits correspondant aux associations
1-1, 1-N, N-1, M-N
R. Grin
Hibernate
page 36
Tags Hibernate pour les associations
Pour les collections : <set>, <list>, <map>,
<bag>, <array> et <primitive-array>
Les cardinalits avec les tags suivants : <oneto-one>, <one-to-many>, <many-toone>, <many-to-many> (on ajoutera <join>
pour un cas particulier)
Dtails tags pour les collections
R. Grin
Hibernate
page 37
<bag> (sac) : une collection non ordonne
qui peut contenir plusieurs fois le mme
lment (au contraire dun set)
<primitive-array> : un tableau de type
primitif (int[] par exemple)
R. Grin
Hibernate
page 38
Exemple dassociation N-1
Fichiers de mapping
On se place du point de vue de la classe dont
on dcrit le mapping
Si la classe contient une collection, on utilise
un tag de collection qui contient lui-mme un
tag indiquant la cardinalit de lassociation
Sinon, on utilise un des tags qui indique la
cardinalit
Cas de lassociation unidirectionnelle Employ
> Dpartement :
<class name="Employe">
<id name="id" column="employeId">
. . .
correspond au {get|set}Dept
</id>
du transparent suivant
. . .
<many-to-one name="dept"
column="NUM_DEPT"
class="Departement"/>
</class>
R. Grin
R. Grin
Hibernate
page 39
En Java
Hibernate
page 40
Si lassociation est bidirectionnelle
public class Employe {
private Departement dept;
. . .
public Departement getDept() {
return dept;
}
public void setDept(Departement dept) {
[Link] = dept;
}
}
R. Grin
Hibernate
page 41
public class Departement {
private Set employes = new HashSet();
. . .
public Set getEmployes() {
return employes;
}
public void setEmployes(Set employes) {
[Link] = employes;
}
}
R. Grin
Hibernate
page 42
Fichier de mapping de Departement
correspond au
<class name="Departement"
getEmployes du
table="DEPARTEMENT">
transparent prcdent
. . .
<set name="employes">
<key column="NUM_DEPT" />
<one-to-many class="Employe"/>
</set>
</class>
R. Grin
colonne de la table
EMPLOYE (pas
DEPARTEMENT) cl
trangre vers
DEPARTEMENT Hibernate
Pas de gestion automatique des
associations bidirectionnelles
Au contraire des containers dEJB entits,
Hibernate nautomatise pas la synchronisation
des 2 bouts dune association
Si une association est bidirectionnelle, le
programmeur doit grer cette synchronisation
Attention, ce fichier est
incomplet
page 43
R. Grin
Problme 1
Hibernate
page 44
Problme 1 (suite)
Dans le code Java, il ne faut donc pas oublier
de grer les 2 cts de lassociation
Par exemple, si on ajoute un employ dans un
dpartement :
[Link](dept);
[Link]().add(employe);
Pour faciliter la programmation, on ajoute
souvent cette mthode dans Departement :
On peut maintenant rendre private la
mthode getEmployes de la classe
Departement pour une meilleure conception
(encapsulation)
En effet, si Hibernate conseille davoir des
accesseurs/modificateurs pour les proprits
persistantes, ceux-ci peuvent tre private
public void addEmploye(Employe emp) {
[Link](emp);
[Link](this);
}
R. Grin
Hibernate
page 45
R. Grin
Problme 2
Pour reprsenter lassociation en relationnel,
il suffit de positionner une cl trangre ; il ny
a pas 2 oprations faire comme en Java
On indique Hibernate de ne pas faire 2 fois
la mme opration en ajoutant un attribut
inverse dans le mapping de Departement :
<set name="employes" inverse="true">
<key column="NUM_DEPT" />
<one-to-many class="Employe"/>
</set>
Hibernate
page 46
Le fichier de mapping complet
R. Grin
Hibernate
page 47
<class name="Departement"
table="DEPARTEMENT">
. . .
<set name="employes"
inverse="true">
<key column="NUM_DEPT" />
<one-to-many class="Employe"/>
</set>
</class>
R. Grin
Hibernate
page 48
Association M-N
Exemple dassociation M-N
Les associations M-N sont traduites en
relationnel par une table association
En objet elles sont traduites par des collections
Dans le fichier de mapping on aura donc un
tag collection pour indiquer lassociation ;
ce tag collection indiquera les noms des
colonnes de la table association
Le nom de la colonne qui rfrence la table
correspondant la classe du fichier de
mapping est indiqu par le tag key
R. Grin
Hibernate
page 49
Association M-N qui traduit la participation dun
employ un projet
Pour enregistrer une nouvelle participation, le
code
n doit ajouter le projet dans la collection de la
classe Employe des projets auxquels
lemploy participe
n et il doit aussi ajouter lemploy dans la
collection de la classe Projet des employs
qui participent au projet
R. Grin
Code Java
public void addProjet(Projet projet) {
[Link]().add(projet);
[Link]().add(this);
}
Hibernate
page 50
Fichiers de mapping
Mthode de la classe Employ qui ajoute la
participation dune personne un vnement
(il faut choisir une des 2 classes pour ajouter
ce type de mthode) :
R. Grin
Hibernate
page 51
<class name="Employe">
. . .
<set name="projets"
table="PARTICIPATION">
<key column="CODE_PROJET"/>
<many-to-many
class="Projet"
column="CODE_PROJET" colonne de la table
association qui
/>
rfrence la table
</class>
colonne de la table
EMPLOYE
association qui
rfrence la table
PROJET
R. Grin
Hibernate
page 52
Contrainte pour le code Java
Les associations doivent tre types avec
des interfaces : Set, Collection, Map ou
SortedMap
Hritage
En effet, Hibernate utilisera ses propres
classes pour implmenter ces interfaces
Il pourra ainsi faire des chargements retards
(lazy) et suivre les ajouts et les suppressions
dans les associations pour grer la
persistance transitive (attributs cascade )
R. Grin
Hibernate
page 53
R. Grin
Hibernate
page 54
Stratgie
une seule table par hirarchie
Hibernate supporte les 3 stratgies
principales pour la correspondance en
relationnel des hirarchies dhritage
R. Grin
Hibernate
page 55
Il faut utiliser les sous-tags suivant du tag
<class> dans les fichiers de mapping :
n <discriminator> indique la colonne de la
table qui contient la valeur qui permet de
diffrencier les lignes correspondant aux sousclasses dans la table
n <subclass> introduit une sous-classe de la
racine de la hirarchie ; ce tag peut contenir
lui-mme des sous-tags <subclass>
R. Grin
Exemple
Hibernate
page 57
<subclass name="CarteCredit"
discriminator-value="CC">
<property name="type"
column="TYPE_CC"/>
...
</subclass>
...
</class>
</hibernate-mapping>
R. Grin
On utilise le sous-tag <joined-subclass>
du tag <class> ; il peut contenir lui-mme
des sous-tags <joined-subclass>
Ce sous-tag contient lui-mme un sous-tag
<key> qui permet dindiquer la cl primaire
de la sous-classe, qui est aussi une cl
trangre vers la cl primaire de la classe
mre
Hibernate
page 59
Hibernate
page 58
Exemple
Stratgie une table par classe
R. Grin
page 56
Exemple (suite)
<hibernate-mapping>
<class name="Paiement"
table="PAIEMENT"
discriminator-value="P">
<id name="id" column="PAIEMENT_ID"
type="long">
<generator class="native"/>
</id>
<discriminator column="TYPE_PAIEMENT"
type="string"/>
<property name="proprietaire"
column="PROPRIETAIRE" type="string"/>
. . .
R. Grin
Hibernate
<hibernate-mapping>
<class name="Paiement"
table="PAIEMENT">
<id name="id" column="PAIEMENT_ID"
type="long">
<generator class="native"/>
</id>
<property name="proprietaire"
column="PROPRIETAIRE" type="string"/>
. . .
R. Grin
Hibernate
page 60
10
Stratgie
une table par classe concrte
Exemple (suite)
<joined-subclass name="CarteCredit"
table="CARTE_CREDIT">
<key column="CARTE_CREDIT_ID">
<property name="type"
column="TYPE_CC"/>
...
Nom de la colonne
</joined-subclass>
qui est cl primaire
...
de la table
</class>
CARTE_CREDIT et
</hibernate-mapping>
cl trangre vers la
table PAIEMENT
R. Grin
Hibernate
page 61
Chaque classe concrte est dfinie part
Les fichiers de mapping ne font pas rfrence
aux autres classes
R. Grin
Hibernate
page 62
Requtes
Hibernate offre plusieurs faons de retrouver
des donnes enregistres dans la base
2 de ces faons utilisent une vision
totalement objet des donnes
Une 3me faon permet un accs direct par
SQL
Retrouver des donnes
R. Grin
Hibernate
page 63
3 faons de retrouver des donnes
Langage HQL :
LAPI Criteria pour QBC (query by criteria) et
pour QBE (query by example) :
Hibernate
page 64
3 faons de retrouver des donnes
[Link]("from Employe e where
[Link] like 'Dup%'");
R. Grin
SQL direct avec mapping automatique du
rsultat avec les objets :
[Link]("select {e.*} from
EMPLOYE {e} where NOM like 'Dup%'", "e",
[Link]);
[Link]([Link]).add
([Link]("nome", "Dup%"));
R. Grin
Hibernate
page 65
R. Grin
Hibernate
page 66
11
Quelle faon utiliser ?
HQL
Criteria crit = [Link]("from
Employe e where [Link] like 'Dup%'");
[Link]([Link]("nome"));
[Link](0);
[Link](20);
List noms = [Link]();
HQL est prconis pour les requtes
complexes
R. Grin
Hibernate
page 67
R. Grin
HQL Chanage des mthodes
List noms = [Link]("from
Employe e where [Link] like 'Dup%'")
.addOrder([Link]("nome"))
.setFirstResult(0)
.setMaxResults(20)
.list();
R. Grin
Hibernate
Hibernate
page 68
Danger !
Il est dangereux de construire une requte
partir dune chane de caractres dont une
partie est constitue de chanes saisies par
un utilisateur
Il faut plutt utiliser les possibilits de
paramtrage offertes par Hibernate
page 69
R. Grin
Paramtres
Hibernate
page 70
la JDBC
2 possibilits pour paramtrer les requtes
n la JDBC (avec des ? )
n Avec des paramtres nomms (:nomparam)
Les paramtres nomms sont recommands :
n les paramtres de position sont plus
sensibles aux modifications (si on ajoute un
paramtre par exemple)
n un paramtre nomm peut apparatre
plusieurs fois dans une requte
String query =
"from Employe e where [Link] like ? and
[Link] > ? ";
List noms =
[Link](query)
.setString(0, "Dup%") // 0 et pas 1 !
.setDate(1, dateDebut)
.list();
de type Date
R. Grin
R. Grin
Hibernate
page 71
Hibernate
page 72
12
Paramtres nomms
setEntity
String query =
"from Employe e where [Link] like
:modeleNom";
List noms =
[Link](query)
.setString("modeleNom", "Dup%")
.list();
R. Grin
Hibernate
Il est possible dattacher un objet entier un
paramtre :
[Link](
"from Employe e where [Link] = :dept")
.setEntity("dept", dept)
.list();
page 73
R. Grin
Hibernate
page 74
Mode de rcupration eager
lazy
Avec ce mode on peut indiquer Hibernate
dinitialiser une collection
Dans les exemples suivants on indique
Hibernate dinitialiser les collections employes
des instances de Departement rcupres
Lorsquune requte rcupre des objets qui
contiennent une collection qui traduit une
association, cette collection nest pas
initialise sauf si on le demande explicitement
Exemple : si on rcupre un dpartement, la
collection des employs nest pas initialise
par dfaut
La collection ne sera initialise que lorsquelle
sera absolument ncessaire, par exemple si
on veut des informations sur un des employs
R. Grin
Hibernate
page 75
Avec HQL :
from Departement d
left join fetch [Link] e
Avec Criteria :
[Link]("employes",
[Link])
R. Grin
Hibernate
page 76
Dirty checking
Lorsque la transaction est valide il est inutile
denregistrer tous les objets enregistrs dans
la session
Il faut donc un moyens de connatre les
objets qui ont t modifis
Essentiellement 2 solutions :
n on intercepte les modifications pour
enregistrer si un objet a t modifi ou non
n on compare les valeurs des objets au
moment o on les rcupre et au moment
o on devrait les enregistrer
Quelques problmes et solutions
pour limplmentation
R. Grin
Hibernate
page 77
R. Grin
Hibernate
page 78
13
Dirty checking
Dirty checking
La 1re solution (interception) implique une
modification du code source ou, le plus
souvent, du bytecode
La 2me solution implique que lon puisse faire
une copie de lobjet (ou des valeurs de
lobjet) et que lon puisse comparer les
valeurs (souvent avec la mthode equals)
R. Grin
R. Grin
Hibernate
page 79
Pour savoir si on doit suivre les associations
1-N ou M-N qui partent dun objet persistant,
on doit aussi utiliser ses propres classes de
collection pour enregistrer les informations
ncessaires
Hibernate
page 80
Lazy loading
Le plus souvent on a besoin de modifier le
code de lapplication
Par exemple, on remplace lobjet par un
proxy qui reprsente lobjet mais ne contient
pas tout ltat de lobjet
Dans le cas o on veut grer le chargement
ou pas des objets associs un objet
(associations 1-N ou M-N), on doit aussi
utiliser ses propres classes de collection
R. Grin
Hibernate
page 81
Configuration dHibernate
R. Grin
Hibernate
page 82
Configuration dHibernate
Exemple de configuration (en-tte)
Il faut dcrire en particulier le SGBD utilis
pour la persistance
La configuration est contenue dans un fichier
[Link] plac dans le
classpath
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD
3.0//EN"
"[Link]
[Link]">
R. Grin
R. Grin
Hibernate
page 83
Hibernate
page 84
14
session-factory
session-factory
Un tag session-factory par base de
donnes (le plus souvent, une seule base) :
<hibernate-configuration>
<session-factory>
. . .
</session-factory>
<session-factory>
. . .
</session-factory>
</hibernate-configuration>
R. Grin
Hibernate
page 85
Chaque session-factory contient les
informations pour obtenir une connexion la
base, le dialecte SQL (Oracle, DB2,) et
divers autres informations
R. Grin
Hibernate
page 86
Connexion la base
Autres informations
<property name="connection.driver_class">
[Link]
</property>
<property name="[Link]">
jdbc:oracle:thin:@[Link]:INFO
</property>
<property name="[Link]">
toto
</property>
<property name="[Link]">
xxxxx
</property>
<!-- JDBC connection pool -->
<property name="connection.pool_size">1
</property>
<property name="dialect">
[Link]
</property>
<!-- Affiche les ordres SQL excuts -->
<property name="show_sql">true</property>
<!-- Recre la base au dmarrage -->
<property
name="[Link]">create</property>
<mapping resource="[Link]"/>
R. Grin
R. Grin
Hibernate
page 87
Hibernate
page 88
Fichier de log
Le fichier de configuration [Link]
doit se trouver dans le fichier src et recopi
pour lexcution dans le rpertoire
dexcution
Si le fichier jar [Link] nest pas
visible, lAPI standard de logging sera utilis
par Hibernate
Il faut configurer le logging pour quil renvoie
les erreurs dans un fichier de log
Mise au point
R. Grin
Hibernate
page 89
R. Grin
Hibernate
page 90
15
Exemple pour log4j (2)
Exemple pour log4j (1)
### direct log messages to stdout ###
[Link]=[Link]
der
[Link]=[Link]
[Link]=[Link]
rnLayout
[Link]=%d{A
BSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file [Link] ###
[Link]=[Link]
[Link]=[Link]
[Link]=[Link]
Layout
[Link]=%d{ABS
OLUTE} %5p %c{1}:%L - %m%n
R. Grin
Hibernate
page 91
### set log levels - for more verbose logging
change 'info' to 'debug'
[Link]=warn, file
[Link]=info
### enable the following line if you want to track
down connection
### leakages when using
DriverManagerConnectionProvider
[Link]
gerConnectionProvider=trace
### log JDBC bind parameters ###
[Link]=info
### log prepared statement cache activity ###
[Link]
ache=info
R. Grin
Requtes SQL
page 92
schemaexport
Hibernate affiche sur la console les requtes
SQL quil lance
Exemple daffichage :
Hibernate: insert into EVENTS
(EVENT_DATE, title, EVENT_ID) values (?,
?, ?)
R. Grin
R. Grin
Hibernate
Hibernate
page 93
Il peut aussi tre intressant dtudier les
commandes DDL (create table) lances
par Hibernate pour crer les tables
On peut ainsi voir si les fichiers de
configuration sont correctement crits
Hibernate
page 94
Bibliographie
Hibernate In Action par Christian Bauer et
Gavin King, dition Manning
Traduction franaise : Hibernate, dition
CampusPress, collection Rfrence
R. Grin
Hibernate
page 95
16