J'ai un service web qui est essentiellement un wrapper pour un DAO. J'appelle le service Web/DAO pour demander une collection d'entités. La classe d'entité "parent" contient une collection d'objets d'entité "enfant", c'est-à-dire une relation un-à-plusieurs. L'appel de méthode DAO qui va chercher la collection d'entités « parent » (c.-à-myDAO.findAll()) retourne sans problème, mais le résultat final de l'appel de service Web est cette exception:Hibernate LazyInitializationException: impossible d'initialiser paresseusement une collection de rôle
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: Station.observations, no session or session was closed
Quelques informations de fond:
J'ai deux entités, Station et Observations. Une entité Station (le "parent") contient une collection d'objets Observations (les "enfants").
La classe DAO pour les entités Station, StationDao a le code suivant pour la méthode appelée, findAll():
private SessionFactory sessionFactory;
private Class<T> persistentClass;
public List<T> findAll()
{
return getCurrentSession().createQuery("from " + persistentClass.getName()).list();
}
Dans ce cas, je ne suis pas intéressé par la collection des enfants (observations) connexes aux parents (stations) étant complètement récupéré avant que la collection des parents soit retournée. Cependant, il semble que l'on tente de récupérer complètement ces objets enfants (observations) avant de renvoyer la collection d'objets parents (station) dans la réponse, et cela échoue parce que la session d'origine n'est plus disponible. Est-ce que quelqu'un peut suggérer comment je contournerais cette erreur? Peut-être existe-t-il un moyen de maintenir la session pendant la durée de la demande?
Merci d'avance pour votre aide!
--James
rechercher le modèle "ouvrir la session dans la vue" – KeatsPeeks
Vous pouvez essayer d'aller chercher les observations avec impatience, mais si vous voulez garder le chargement paresseux, vous devez vous assurer que la session est vivante. Je vous suggère de rechercher "Unité de travail" et Transactions. – zoidbeck
Merci pour les commentaires. J'utilise l'approche suggérée ici: http://community.jboss.org/wiki/OpenSessioninView, mais malheureusement, quand j'entre dans le code de filtre pour obtenir la session en cours, je reçois une erreur me disant "No Hibernate Session bound to thread" . Mes classes DAO sont annotées avec @Transactional et j'ai défini le dans mon contexte d'application Spring sur le gestionnaire de transactions Hibernate. Quelqu'un peut-il suggérer quoi d'autre que je devrais considérer comme une cause possible de mon erreur? –