Bonjour à tous !
Je rencontre actuellement un problème avec le lazy-loading d'hibernate.
J'obtiens l'exception suivante lorsque je souhaite accéder aux données d'une collection :
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: fr.habipro.crm.models.Groupe.societes, no session or session was closed
Pour situer un peu le contexte je développe un client lourd en J2SE et je manipule des objets de type Societe qui contiennent différentes informations sur des sociétés.
Je dispose d'une fenêtre qui m'affiche la liste des sociétés et quand je double clique sur un enregistrement j'ai une fenêtre d'édition qui s'ouvre à la place (grâce à un CardLayout).
Chaque fenêtre dispose de sa propre session qui est ouverte/fermée en fonction des évènements componentShown() et componentHide().
J'utilise également une Classe Groupe qui contient une liste de sociétés.
Parallèlement à ça j'enregistre chacune des modifications apportées aux champs de la société. Une société a donc une liste d'objets Historiques.
Sous ma fiche d'edition j'ai un JTabbedPane composé de deux onglets : un Historique qui affiche une liste d'objets Historique, et un objet Groupe qui affiche une liste des sociétés appartenant à ce groupe (dont la société en cours d'edition fait partie).
Tant que je n'avais pas ajouté l'onglet Groupe cela fonctionnait bien. C'est à dire que ma société était bien chargée ainsi que ses Historiques, ce qui prouve bien qu'une session est active à ce moment là et que mon objet Société y est bien attaché (en état persistant puisque j'ai pris soin de le ré-attacher à la session de la fenêtre d'edition avec la commande session.update()).
Le problème survient quand je veux charger la liste des sociétés du groupe.
Dans la fonction qui initialise mon affichage (et qui charge les données) je récupère le groupe auquel appartient la société.
Ensuite je teste si le groupe récupéré est null (ce qui veut dire que la société n'appartient pas à un groupe) et s'il n'est pas nulle je charge sa liste de sociétés dans une JTable de façon tout à fait classique.
C'est à ce moment là que l'erreur survient et la liste des sociétés n'est pas récupérées.
Ce que je trouve étrange c'est qu'une session existe et est fonctionnelle à ce moment là et que je me retrouve avec un "No session or session was closed".
Sachant que ma société est correctement liée à une session, comment se fait-il que le Groupe que je récupère via societe.getGroupe() ne le soit pas ?
J'ai effectué un session.update(legroupe) pour l'attacher à la session et j'ai une erreur qui me dit qu'un objet avec la même clé primaire existe.
Si j'effectue un session.merge(legroupe) il ne se passe rien et j'ai la même erreur.
Je précise également que j'ouvre toutes mes sessions avec openSession() et que c'est moi qui les ferme explicitement.
Je vous remercie d'avance pour l'aide que vous pourrez m'apporter
Partager