2009-10-16 8 views
0

J'ai 2 objets Hibernate:Exception LazyInitialization

Dero et Motif.

a Dero a un ensemble de Motif.

Je charge un objet Dero à partir de l'amende DB. mais lorsque je tente d'accéder à son ensemble de Motif:

assertEquals(dero.getMotifRefus(),deroFromDB.getMotifRefus()); 

Je reçois une exception:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection 
of role: com.dossier.Derogation.motifRefus, no session or session was closed 
at 
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358) 

Comment puis-je résoudre ce problème?

Répondre

2

Il semble que la session qui a été récupérée Dero a été fermée avant l'initialisation de l'ensemble de Motifs paresseux. Il existe différentes façons de résoudre cela, en fonction de votre environnement et de votre cas d'utilisation.

Il vous parle d'un webapp alimenté au printemps, OpenSessionInViewFilter serait pour vous

<filter> 
    <filter-name>OpenSessionFilter</filter-name> 
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> 
</filter> 

Je parierais qu'une solution similaire est disponible pour tout webapp bien.

Cet article pourrait être utile: Open Session in View (hibernate.org)

+0

Je n'utilise pas Spring. J'utilise des objets d'hibernation de mon ejb v 2. – Attilah

+0

désolé, ne peut pas vous aider avec ejb2, mais http://www.google.com/search?q=hibernate+"open+session+in+view"+ejb2 devrait donner assez de résultats – sfussenegger

0

La OSIV (Open Session in View) modèle est juste qu'un modèle afin que vous puissiez vraiment regarder le code source pour la mise en œuvre du printemps et l'adapter à votre EntityManager (métaboliseurs sont connus sous le nom de Sessions dans Hibernate et les EMF sont connus sous le nom de SessionFactories). Regardez également this sur le site Hibernate et adaptez-vous.