|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Brems DaliInscription : juillet 2010 Messages : 15 ![]() |
Bonjour,
J'envisage toujours le même problème avec Hibernate, je m'explique: Je récupère une liste d’évènement de ma BDD, dans chq evnt il y a des participants je dois afficher chq evnt suivi de sa liste de participant, le problème est la: qd j'essaye d’accéder a la liste des participant l'exception suivante se lève: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: Evenement.participants, no session or session was closed Les fichiers de mapping: Code :
Code :
Code :
Merci d'avance. |
||||||
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() |
c'est le principe du lazy loading, hibernate te retourne ton objet mais n'a pas encore initialisé les collections associées. quand tu essaies d'y accéder hibernate tente d'exécuter les requêtes mais plante vu que ta session est déjà fermée.
2 solutions donc, soit tu accèdes aux collections avant de fermer la session, soit tu récupères toutes les infos en mettant lazy="false" pour ta collection
__________________
Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro. Plus les choses changent, plus elles restent les mêmes |
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Brems DaliInscription : juillet 2010 Messages : 15 ![]() |
Merci Gardyen t'as réponse m'as été vraiment utile
finalement j'ai choisi la deuxième solution et ça marche. Est ce que tu peux seulement me dire plus sur le rôle de lazy dans les deux cas: true et false? |
|
|
00
|
|
|
#4 |
|
Membre chevronné
![]() |
de nombreux tuto existent, mais en résumé:
true: comportement par défaut pour les collections. quand tu récupères un objet dans la base, hibernate charge les infos de cet objet mais ne va pas récupérer les collections, c'est-à-dire qu'une seule requête est effectuée, celle pour l'objet principal. false: hibernate récupère l'objet principal puis va chercher les objets de la collection, tu as donc plusieurs requêtes pour avoir toutes les infos. de plus, le fait de charger tous les objets non-lazy entraîne une consommation de mémoire accrue, et tu peux dans les cas extrêmes avoir toute ta base en mémoire en une seule requête... le load immédiat est donc à manipuler avec précaution, voire à éviter carrément
__________________
Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro. Plus les choses changent, plus elles restent les mêmes |
|
|
10
|
Copyright © 2000-2013 - www.developpez.com