These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 
Author Message
 Post subject: [Debutant] Remplissage des données par Hibernate
PostPosted: Wed Mar 15, 2006 5:53 am 
Newbie

Joined: Wed Mar 15, 2006 5:44 am
Posts: 2
Hibernate version:
3.0.5

Bonjour,

je tente actuellement de comprendre où mon programme passe le plus de temps, et il s'avère que c'est lorsqu'Hibernate peuple les objets à la suite d'une requête HQL.

Ma requète ramène environs 8000 lignes de la base de données et prend environs 4 secondes à s'éxécuter.
En revanche, Hibernate, derrière, prend plus de 50 secondes pour transformer ces données en objets !
Toutes les associations sont en lazy="true", les proxy sont placés correctement, il n'y a pas de stratégie de cache mise en place autre que celle par défaut.

Mon mapping contient beaucoup de jointure "set" ou "many-to-one" etc. Lorsqu'Hibernate me crée un objet, il initialise toutes ses collections avec son propre type d'objet (Set) pour lui permettre de gérer les Lazy correctement (si j'ai bien compris).
J'ai donc dans ma log hibernate des messages :
Quote:
2006-03-15 10:44:28,667 DEBUG http-8080-Processor23 org.hibernate.engine.TwoPhaseLoad - resolving associations for [test.AppelOffre#59]
2006-03-15 10:44:28,667 DEBUG http-8080-Processor23 org.hibernate.event.def.DefaultLoadEventListener - loading entity: [test.Operation#1]
2006-03-15 10:44:28,667 DEBUG http-8080-Processor23 org.hibernate.event.def.DefaultLoadEventListener - entity found in session cache
2006-03-15 10:44:28,667 DEBUG http-8080-Processor23 org.hibernate.event.def.DefaultLoadEventListener - loading entity: [test.Statuts#21]
2006-03-15 10:44:28,667 DEBUG http-8080-Processor23 org.hibernate.event.def.DefaultLoadEventListener - entity found in session cache
2006-03-15 10:44:28,667 DEBUG http-8080-Processor23 org.hibernate.engine.CollectionLoadContext - creating collection wrapper:[test.AppelOffre.listeAppelOffreUniteBesoin#59]
2006-03-15 10:44:28,667 DEBUG http-8080-Processor23 org.hibernate.engine.CollectionLoadContext - creating collection wrapper:[test.AppelOffre.listeAppelOffreFournisseur#59]
2006-03-15 10:44:28,667 DEBUG http-8080-Processor23 org.hibernate.engine.TwoPhaseLoad - done materializing entity [test.AppelOffre#59]


donc des "creating collection wrapper:" qui prennent un temps infini sur ma (grosse) requète.

N'y-a-t-il pas moyen de se passer de ceci ?
Est-ce qu'il faut que j'optimise mon mapping (en en créant un autre spécifique) pour ma recherche ?
Est-ce qu'il y a des options que j'ai oublié ?

Merci pour votre aide !


Top
 Profile  
 
 Post subject:
PostPosted: Thu Mar 16, 2006 6:08 pm 
Beginner
Beginner

Joined: Mon Nov 28, 2005 7:16 pm
Posts: 20
Combien de temps ça prend sans écrire les logs de debug et en mettant hibernate "silencieux" ?


Top
 Profile  
 
 Post subject:
PostPosted: Thu Mar 16, 2006 6:30 pm 
Newbie

Joined: Wed Mar 15, 2006 5:44 am
Posts: 2
Plus de 90 secondes pour 8000 lignes renvoyées.


Top
 Profile  
 
 Post subject:
PostPosted: Sat Mar 18, 2006 10:00 am 
Beginner
Beginner

Joined: Mon Nov 28, 2005 7:16 pm
Posts: 20
ouais je sais pas alors, moi quand je desactive les log je gagne bien en perf (4 fois plus vite a vu de nez).

Un autre truc aussi que j'ai lu je sais plus où pour eviter à hibernate de faire de trucs trop couteux, c'est de mettre les setter et getter en public ou protected plutot qu'en private.

Bon courage


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.