
La FAQ HibernateConsultez toutes les FAQ
Nombre d'auteurs : 4, nombre de questions : 63, dernière mise à jour : 5 juin 2009
Sommaire→Les fichiers de config- Qu'est ce que le fichier Hibernate.properties ?
- Qu'est ce que le dialect SQL ?
- Comment configurer un pool de connexion ?
- Comment configurer un pool de connexion C3P0?
- Comment utiliser une datasource JNDI ?
- Qu'est ce que le fichier Hibernate.cfg.xml
- Comment ajouter un nouveau fichier de mapping dans Hibernate ?
- Comment faire pour ne pas utiliser JNDI ?
Le fichier hibernate.properties sert à configurer l'accès à la base de données. On va donc y configurer les différentes infos nécessaires à une connexion JDBC. On peut aussi configurer le pool de connexion via ce fichier.
Les infos indispensables sont les suivantes :
- hibernate.connection.driver_class = Le chemin vers le driver JDBC (par exemple org.postgresql.Driver)
- hibernate.connection.url = Le chemin d'accès à la base (par exemple jdbc:postgresql://localhost/mydatabase)
- hibernate.connection.username = Le nom d'utilisateur de la connexion
- hibernate.connection.password = Le mot de passe de la connexion
- hibernate.dialect = Le dialecte de votre base de données (par exemple net.sf.hibernate.dialect.PostgreSQLDialect), voir le lien pour plus d'infos
La propriété hibernate.dialect du fichier hibernate.properties vous sert à configurer le dialecte SQL de votre base de données. Ce dialecte va servir à Hibernate pour optimiser certaines parties de l'exécution en utilisant les propriétés spécifiques à la base. Cela se révèle très utile pour la génération de clé primaire et la gestion de concurrence tel que le pessimist locking.
Voici une liste des dialectes utilisables :
| Base de données | Dialecte |
|---|---|
| DB2 | net.sf.hibernate.dialect.DB2Dialect |
| DB2 AS/400 | net.sf.hibernate.dialect.DB2400Dialect |
| DB2 OS390 | net.sf.hibernate.dialect.DB2390Dialect |
| PostgreSQL | net.sf.hibernate.dialect.PostgreSQLDialect |
| MySQL | net.sf.hibernate.dialect.MySQLDialect |
| Oracle (toute version) | net.sf.hibernate.dialect.OracleDialect |
| Oracle 9/10g | net.sf.hibernate.dialect.Oracle9Dialect |
| Sybase | net.sf.hibernate.dialect.SybaseDialect |
| Sybase Anywhere | net.sf.hibernate.dialect.SybaseAnywhereDialect |
| MS SQL Server | net.sf.hibernate.dialect.SQLServerDialect |
| SAP DB | net.sf.hibernate.dialect.SAPDBDialect |
| Informix | net.sf.hibernate.dialect.InformixDialect |
| HypersonicSQL | net.sf.hibernate.dialect.HSQLDialect |
| Ingres | net.sf.hibernate.dialect.IngresDialect |
| Progress | net.sf.hibernate.dialect.ProgressDialect |
| Mckoi SQL | net.sf.hibernate.dialect.MckoiDialect |
| Interbase | net.sf.hibernate.dialect.InterbaseDialect |
| Pointbase | net.sf.hibernate.dialect.PointbaseDialect |
| FrontBase | net.sf.hibernate.dialect.FrontbaseDialect |
| Firebird | net.sf.hibernate.dialect.FirebirdDialect |
Hibernate possède son propre algorithme de pool de connexion, mais il reste très rudimentaire et n'est pas conseillé pour un programme en production.
Pour utiliser le pool de connexion d'Hibernate, il vous suffit de rajouter cettte ligne dans le fichier Hibernate.properties :
hibernate.connection.pool_size=nombre maximum de connection simultanées
Hibernate ayant un algorithme très basique pour les pools de connexion, on peut aussi utiliser d'autres pools de connexion. Par exemple, C3P0.
C3P0 est un pool de connexion JDBC open-source distribué avec Hibernate. C3P0 possède un algorithme plus évolué que celui d'Hibernate, vous pourrez donc l'utiliser directement dans un programme en production.
Pour l'utiliser, il vous faudra ajouter quelques lignes dans votre fichier hibernate.properties :
hibernate.c3p0.min_size=Taille minimale du pool
hibernate.c3p0.max_size=Taille maximale du pool
hibernate.c3p0.timeout=Temps pendant lequel une connexion peut être utilisée avant d'être libérée. 0 signifie qu'une connexion n'expire pas.
hibernate.c3p0.max_statements=La taille du cache de statements de C3P0. 0 signifie qu'on désactive le cache.
Vous pouvez aussi configurer C3P0 dans le fichier hibernate.cfg.xml. La seule différence réside dans le fait qu'une propriété se présente ainsi :
<property name="c3p0.max_size">100</property>
Dans le cadre d'une utilisation avec un serveur d'application, il faudrait toujours configurer Hibernate pour qu'il aille chercher ses DataSource dans le serveur enregistré dans le JNDI.
Pour faire cela, il vous suffit de configurer au moins une des propriétés suivantes :
hibernate.connection.datasource=Le nom JNDI de la datasource (obligatoire)
hibernate.jndi.url=L'url du fournisseur JNDI(facultatif)
hibernate.connection.username=Le nom d'utilisateur de la base de données (facultatif)
hibernate.connection.password=Le mot de passe de l'utilisateur de la base de données (facultatif)
hibernate.jndi.class=La classe de l'InitialContextFactory du JNDI (facultatif)
Le fichier Hibernate.cfg.xml a presque la même utilité que le fichier Hibernate.properties. Soit on configure la connexion JDBC dans le fichier properties soit on le configure ici. Les deux cas sont équivalents.
La seule chose ou il change, est que ce fichier sert aussi à mapper les différents fichiers de mapping de l'application.
A chaque fois que vous créerez un nouveau fichier de mapping, il faudra que Hibernate sache ou il se trouve pour qu'il mappe aussi ces fichiers.
Pour cela, il va falloir dire dans le fichier hibernate.cfg.xml quels sont les fichiers de mapping à charger dans l'application. Pour cela, on utilise la propriété suivante :
<mapping resource="Dossier/Fichier.hbm.xml"/>
Vous ajouterez cette ligne autant de fois que vous aurez de fichier de mapping.
Cette Q/R traite de la configuration XML.
Lorsque vous n'utilisez pas JNDI, il faut faire attention à ne pas spécifier de nom (attribute "name") pour la session-factory :
<session-factory>
Si vous utilisez un nom, Hibernate va tenter de faire le binding avec JNDI ce qui va vous poser problème si vous n'avez pas de contexte JNDI configuré.


















