org.hibernate.LazyInitializationException: failed to lazily initialize, sur un objet précis
Bonjour, j'ai un souci sur un de mes service quand j'essai d’insérer une entrée en base. Je suis sur du hibernate 3.
L'implementation du service est la suivante:
Code:
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
|
public Editeurs addDeclaration(long produitId, long requetes, long records) throws RemoteException {
Session sqlSession = null;
Editeurs user = null;
try {
// Ouverture session SQL
Context ctx = new InitialContext();
SessionFactory factory = (SessionFactory)ctx.lookup("hbm/Annuaire");
sqlSession = factory.openSession();
ProduitVendu produit = (ProduitVendu)sqlSession.load(ProduitVendu.class, new Long(produitId));
Declaration declaration = new Declaration();
declaration.setProduit(produit);
declaration.setDebut(produit.getNextDeclarationStartDate());
declaration.setFin(produit.getNextDeclarationEndDate());
declaration.setRequetes(requetes);
declaration.setEnregistrements(records);
System.out.println("Save Declaration");
sqlSession.save(declaration);
sqlSession.flush();
user = produit.getEditeurs();
sqlSession = factory.openSession();
user = (Editeurs)sqlSession.load(Editeurs.class, new Long(user.getEditeurId()));
catch (Exception e) {
// throw new RemoteException(e.getMessage());
e.printStackTrace(System.out);
}
finally {
sqlSession.close();
}
return user;
} |
J'obtiens l'exeption suivante :
Code:
1 2 3 4 5 6 7 8 9
|
- failed to lazily initialize a collection of role: com.orange.annuaire.model.ProduitVendu.fichiers, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.orange.annuaire.model.ProduitVendu.fichiers, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:108)
at org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:186)
at com.orange.annuaire.model.Editeurs.getFichiers(Editeurs.java:455) |
Le problème vient je pense du fait que l'attribut "fichiers" de la classe "Editeurs" qui compose "ProduitVendu" ne peut être chargé à la demande dans cette session.
Voici la méthode getFichier() dans la classe Editeurs:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
public List getFichiers() {
List result = new ArrayList();
for(Iterator i = this.getProduitVendus().iterator(); i.hasNext();) {
ProduitVendu produit = (ProduitVendu)i.next();
for(Iterator j = produit.getFichiers().iterator(); j.hasNext();) {
Fichier fic = (Fichier)j.next();
Hibernate.initialize(fic);
result.add(fic);
}
}
return result;
} |
Merci de m'aider sur ce souci