IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

failed to lazily initialize a collection of role ?


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut failed to lazily initialize a collection of role ?
    Bonjour,

    J'ai actuellement le problème suivant :
    J'ai un objet dossier que je crée, puis je le sauve. Ensuite je ferme et relance mon application qui doit donc récupérer tous les dossiers que j'ai crée, cependant, j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:
    Je pense que cela vient à cause d'une collection d'objet qui n'arrive pas à être chargé ?

    Voici la structure de la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @Entity
    public class Dossier implements Serializable {
     
    	@CollectionOfElements
    	@JoinTable(name = "dossier_document_join", joinColumns=@JoinColumn(name = "idH"))	
    	@Cascade(value={CascadeType.DELETE_ORPHAN, CascadeType.ALL})
    	private List<Document> documents;
     
    ...
    Je ne comprends pas pourquoi il ne sont pas chargés ?
    Voici la fonction que j'utilise pour récupérer mes dossiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public List<Dossier> getAll() {
    		 Session session = HibernateUtil.getSession();
    		 List<Dossier> results = session.createQuery("from Dossier").list();		 
    		 session.close();
     
    		return results;
    	}
    Je continue de lire de la documentation en attendant... Mais je ne comprends pas. De plus, dans la documentation, ils disent d'utiliser des annotations @OneToMany mais cela ne marche jamais et sur plusieurs forum il m'avait conseillé de laisser plus celles que j'ai posé (@CollectionOfElement).


    ??

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    J'imagine que tu essaies d'accéder aux documents de tes dossiers, seulement, tes documents ne sont pas chargés par ta requête.
    Pour les charger, il faut le faire explicitement.
    Tu peux le faire par ta requête comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     from Dossier dossier left join fetch dossier.documents
    Tu devrais également remettre le one-to-many qui me semble plus cohérent.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut
    Mais y a t'il un moyen de spécifier par les annotations que lorsque l'on récupère un dossier, on récupérer automatiquement les documents qui vont avec ?

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Oui il faut couper le lazy loading.
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)

    Ne pas abuser de cela au risque de remonter beaucoup de données et de faire exploser la mémoire ou les temps de réponse.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/01/2015, 20h05
  2. Réponses: 10
    Dernier message: 07/03/2014, 17h18
  3. Failed to lazily initialize a collection
    Par Grumium dans le forum Hibernate
    Réponses: 8
    Dernier message: 27/10/2009, 17h35
  4. Réponses: 5
    Dernier message: 23/10/2009, 15h02
  5. Réponses: 1
    Dernier message: 04/04/2007, 10h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo