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 :

org.hibernate.LazyInitializationException: illegal access to loading collection


Sujet :

Hibernate Java

  1. #1
    Invité
    Invité(e)
    Par défaut org.hibernate.LazyInitializationException: illegal access to loading collection
    Bonjour,

    En mappant une relation père fils, je suis confronté à cette exception :
    Caused by: org.hibernate.LazyInitializationException: illegal access to loading collection
    at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:341)
    at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
    at org.hibernate.collection.AbstractPersistentCollection.readElementExistence(AbstractPersistentCollection.java:142)
    at org.hibernate.collection.PersistentSet.contains(PersistentSet.java:153)
    at be.gervaisb.sics.commons.beans.Student.setClasse(Student.java:53)
    ... 38 more
    Mon code de test est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    DAOFactory daof = (DAOFactory) ctx.getBean("daoFactory");
     
            Section section = new Section("Une section");
    		daof.getSectionDao().save(section);
     
    		Option option = new Option("Option", section);
    		daof.getOptionDao().save(option);
     
    		SchoolClass cls1 = new SchoolClass(5, option);
    		Integer id = daof.getClasseDao().save(cls1);
     
    		Student student0 = new Student("Bidon", "Jean");
    		Student student1 = new Student("Demo", "Damien");
    		cls1.addStudent(student0);
    		//cls1.addStudent(student1);
     
    		cls1.setSuffix("A");
    		daof.getClasseDao().update(cls1);
     
     
    		System.out.println("\n INSERT DATAS");		
    		System.out.println("\n["+cls1.getId()+"] "+cls1+"");
    		for (Student student : cls1.getStudents()) {
    			System.out.println("\t["+student.getId()+"]  "+student+" ("+student.getClasse()+")");
    		}
    		id = cls1.getId();
    		cls1.setStudents(null);
    		cls1 = null;
     
    		System.out.println("\n SELECT DATAS");
    		SchoolClass cls = daof.getClasseDao().get(id);
    Et l'exception se produit sur la dernière ligne.

    Tous mes daos étendent celui-ci (sans surcharger les méthodes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    public class GenericHibernateDao<T , PK extends Serializable> extends HibernateDaoSupport {
     
    	protected final static Logger logger = Logger.getLogger();
     
    	private Class<T> type;	
     
    	public GenericHibernateDao(Class<T> type) {
    		this.type = type;
    	}
     
    	/** Store an object to the storage and return the generated key */
    	@SuppressWarnings("unchecked")
    	public PK save(T object) throws DataAccessException {
    		PK key = (PK) getHibernateTemplate().save(object);
    		getHibernateTemplate().flush();
    		//getHibernateTemplate().merge(object);
    		logger.debug("Saving %s '%s' with key '%s'.", type.getSimpleName(), object, key);
    		return key;		 
    	}
     
    	/** 
             * Retrieve an object that was previously saved to the storage using the 
             * indicated key as primary key.
             */
    	@SuppressWarnings("unchecked")
    	public T get(PK key) throws DataAccessException {
    		T object = (T) getHibernateTemplate().get(type, key);
    		logger.debug("Getting %s with key '%s' return '%s'.", type.getSimpleName(), key, object);
    		return object;
    	}
     
    	/** Save changes made to an object */
    	public void update(T object) throws DataAccessException {
    		logger.debug("Updating %s '%s'.", type.getSimpleName(), object);
    		getHibernateTemplate().update(object);
    		getHibernateTemplate().flush();
    	}
     
    	/** Remove an object from the storage */
    	public void remove(T object) throws DataAccessException {
    		logger.debug("Removing "+object);
    		getHibernateTemplate().delete(object);
    	}
    }
    Voilà, j'espère que quelqu'un parmi vous pourra sm'aider à m'en sortir car je suis complètement perdu..
    J'ai vu que cela pouvais-être du à la méthode hashCode() mais j'ai essayé différents façons de la surcharger dans 'Student' et 'SchoolClass' mais j'obtiens toujours la même erreur.
    Mes deux objets 'Student' et 'SchoolClass' n'ont rien d'exceptionnel mais si vous le voulez je peux également les déposer ici..


    MERCI

    Edit : J'ai suivi le tutoriels suivant http://www.hibernate.org/hib_docs/v3...rentchild.html jusqu'au chapitre 21.3 mais sans placer de "not-null" ni de "all-delete-orphan" car pour moi un élève peut exister dans être dans une classe.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il semblerait que ce soit simplement car lors du "setStudents(Set students)" je ne fesais pas un boucle pour affecter à chaque étudiant la classe dans laquelle ils sont maintenant je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void setStudents(Set<Student> students) {
      this.students = students!=null
                               ?new TreeSet<Student>(students)
                               :new TreeSet<Student>();
      for (Student student : this.students) {
        student.setClasse(this);
      }
    }
    Et bien sur l'opérataion "Inverse" dans la classe "Student"

    J'attend de pouvoir retetser tout ça..


    Ha oui, je n'ai pas surchargé equals et hashCode ça risque de me poser des problèmes ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 957
    Points : 4 386
    Points
    4 386
    Par défaut
    Citation Envoyé par Blaise1 Voir le message
    Ha oui, je n'ai pas surchargé equals et hashCode ça risque de me poser des problèmes ?
    le mieux est de bien lire

    http://www.hibernate.org/109.html

    cela devrait répondre à votre question…

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    euh, ça ne sera peut-être pas problématique dans ton cas, mais moi j'ai eu un problème en utilisant cette technique...

    voir ici : http://www.developpez.net/forums/sho...d.php?t=524566

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bon hé bien ça fonctionne très bien maintenant. Pour ceux qui n'auraeint pas suivi la solution est donc de s'assurer que la relation entre les deux objets pere et fils soie bien faite dans tous les cas, lorsque l'on ajoute un fils au pere et manuellement et ce que ce soit fais par nous ou par Hibernate..

    @lantier Oui merci j'ai déja lu cette page et autres sur le même sujet plusieurs fois. Donc, ne pas surcharger equals et hashcode peut avoir de graves conséquences mais ça peux marcher sans.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/08/2014, 17h42
  2. Hibernate / illegal access to loading collection
    Par jaudouy dans le forum Accès aux données
    Réponses: 3
    Dernier message: 13/04/2010, 11h58
  3. illegal access to loading collection
    Par <romain/> dans le forum Hibernate
    Réponses: 0
    Dernier message: 14/04/2009, 18h14
  4. Réponses: 1
    Dernier message: 30/09/2008, 18h07
  5. [Spring][Hibernate]illegal access to loading collection
    Par ysoubigo dans le forum Hibernate
    Réponses: 2
    Dernier message: 24/01/2008, 15h24

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