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 !