Bonjour à tous,
je suis entrain de développer une application web (applet - servlet), et j'utilise aussi des EJB3 avec des entity bean. Le but de mon appli et de pouvoir ajouter, supprimer et faire des requêtes select dans ma base de données.
Mais voila, j'ai un problème qui est lorsque je veux ajouter un élément dans ma base de données j'ai cette erreur :
D'aprés ce que j'ai lu et d'aprés ce que m'as dis djo.mos, car j'ai mis ce post aussi sur le forum JPA mais malheureusement j'ai toujours le problème
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 type Rapport d'exception message description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête. exception org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ejb.TypeDocument.document, no session or session was closed org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358) org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350) org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343) org.hibernate.collection.PersistentSet.add(PersistentSet.java:189) servlet.AjouterDocument.doGet(AjouterDocument.java:153) javax.servlet.http.HttpServlet.service(HttpServlet.java:690) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de JBossWeb/2.0.0.GA., il faut rattacher les objets mais je n'arrive à comprendre comment faire cela, ou ouvrir une session hibernate mais pour tout vous dire ces notions sont assez sombres pour moi.
Pourriez vous m'expliquez pourquoi j'ai cette erreur de lazyInitializationException ?
J'ai une idée car si je fais une requête de type select et que mon objet retournée posséde une collection, cette collection est vide mais je n'arrive pas à comprendre pourquoi ?
Pourriez vous me dire comment je peux résoudre ce problème
Merci
PS : Je ne sais pas si mes explications sont trés claires mais dans ma tête toutes ces notions de session, de rattacher des objets... ne sont pas trés claires
Je vous mais au cas où mes fichiers qui peuvent peut-être vous intéresser :
GestionDeDocumentBean.java
et ma servelt dans laquelle j'appelle ces fonctions :
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 @Stateless public class GestionDeDocumentBean implements GestionDeDocument{ @PersistenceContext EntityManager em; public List<Document> AfficherDocumentCommercial() { return null; } public List<Document> AfficherDocumentTechnique() { return null; } public List<Document> RechercherDocument(Document document, Tag tag) { return null; } public void ajouterDocument(Document document) { em.merge(document); //em.persist(document); } public void supprimerDocument(Document document) { //em.merge(document); em.remove(em.find(Document.class, document.getId())); } public void ajouterTag(Tag tag) { em.merge(tag); //em.persist(tag); } public void ajouterType(TypeDocument type) { em.merge(type); //em.persist(type); } public void ajouterModification(Modification modification) { em.merge(modification); //em.persist(modification); } public void ajouterUser(Utilisateur user) { em.merge(user); //em.persist(user); } public Document recupereDocument(String nom) { Query q = em.createQuery("select d from Document d where d.nom = :nom"); q.setParameter("nom",nom); Document d = (Document) q.getSingleResult(); return d; } public TypeDocument recupereType(String nom){ try{ Query q = em.createQuery("select t from TypeDocument t where t.nom = :nom"); q.setParameter("nom",nom); TypeDocument t = (TypeDocument) q.getSingleResult(); return t; } catch(NoResultException e){ return null; } } public Tag recupereTag(String nom){ try{ Query q = em.createQuery("select t from Tag t where t.nom = :nom"); q.setParameter("nom",nom); Tag t = (Tag) q.getSingleResult(); return t; } catch(NoResultException e){ return null; } } }
AjouterDocument.java : (enfin la partie qui pose problème)
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 TypeDocument td= gdd.recupereType(leType); // si le type n'existe pas alors on cré un nouveau typz if(td==null){ type = new TypeDocument(); type.setNom(leType); type.setCommentaire(""); type.getDocument().add(document); document.setTypeDocument(type); gdd.ajouterType(type); } else{// si le type existe donc on ajoute au type le nouveau document type=td; document.setTypeDocument(type); type.getDocument().add(document); // voila où il y a l'erreur gdd.ajouterDocument(document); }
Partager