# Java > Gnral Java > Persistance des donnes >  Amliorer les performances d'Hibernate

## minimarch76

Bonjour  tous,

je travaille actuellement, dans un cadre professionnel, sur un projet J2EE utilisant Hibernate pour le mapping o/r. La base de donnes sur laquelle je travaille contient plusieurs tables relativement similaires, contenant diffrents types de produits. Nous avons donc choisi de les regrouper  l'aide de la stratgie "une table par classe concrte" (http://www.hibernate.org/hib_docs/v3...bleperconcrete), laquelle est reprsente par une hirarchie de classes du ct objet.

Aprs quelques petits soucis, nous avons russi  mapper le tout pour que cela fonctionne. Malheureusement, ces diffrentes tables contiennent plusieurs millions de lignes chacune, ce qui a tendance  trs fortement dgrader les performances d'Hibernate, tant donn que les requtes qu'ils gnrent ne sont pas des plus rapides. Je m'explique :

Voici un exemple (que j'ai volontairement simplifi et en partie renomm) de la requte SQL gnre par Hibernate pour rcuprer un ensemble de produits, contenus dans les diffrentes tables, mais rattachs  la mme commande :



```

```

Etant donn le nombre de lignes contenues dans les diffrentes tables, cette requte prend plusieurs minutes pour s'excuter (mon record doit tourner autour de 20 min !!). Ceci est d au "select" central travaillant avec l'"union".

En effet, il suffit de transformer la requte comme suit pour que le mme rsultat soit obtenu en 0,01s :



```

```

Etant donn que je possde le code de la requte beaucoup plus rapide, j'aurai pu l'implmenter directement dans le code et trouver un moyen de convertir les rsultats dans les diffrentes classes concernes.

Le problme est que cette requte est gnre automatiquement lorsque Hibernate essaye de rcuprer une collection de produits, appartenant  une commande en tant qu'attribut (nous avons activ l'option Lazy-loading pour limiter le nombre de donnes charges). Nous n'y avons donc pas accs.

Connaissez-vous un moyen (en mappant diffremment les tables, avec une option Hibernate  activer...) d'amliorer les performances des requtes gnres automatiquement par Hibernate ou encore de donner  Hibernate les requtes  utiliser pour les slectionner les attributs souhaits ?

Merci d'avance pour vos rponses,
MiniMarch

----------


## maxf1

Si tu ne trouves pas il est possible de redefinir dans le mapping la requete par default gnr dans le mapping pour un select, update, etc... (fichier .hbm.xml).

----------


## minimarch76

Est-ce que tu aurais un lien, ou un document quelconque en expliquant le fonctionnement ?

Soit j'ai des moufles, soit internet est assez pauvre en informations...

----------


## maxf1

> Soit j'ai des moufles, soit internet est assez pauvre en informations...


Euh...... ::roll::  
Je dirais que internet n'est pas trs riche sur ce point mais que tu es  mi chemin entre la main et la moufle  ::mrgreen::  

Tiens regarde la dessus (a partir du 16.3):

http://www.hibernate.org/hib_docs/v3.../querysql.html

----------


## minimarch

Merci bien ! C'est exactement ce que je cherchais... malheureusement, pour des raisons de temps, je n'ai pas pu la mettre en place dans notre projet. La rponse reste donc thorique, mais je pense que a aurait pu rsoudre pas mal de problme.

Je la garde dans un coin par la suite, je pense que j'en aurai besoin.

Merci encore.

MiniMarch

----------

