Salut,
Avec j'obtiens l'erruer suivante avec Hibernate :
j'ai compris que 2 sessions s'ouvrent en meme temps
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 org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions at org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:410) at org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:40) at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101) at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:61) at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55) at org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:123) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:268) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:217) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495) at be.qspin.qats.business.HibernateUtility.setRow(HibernateUtility.java:99) at be.qspin.qats.business.Applicants.saveKeywords(Applicants.java:152) at be.qspin.qats.struts.action.ManageKeywordAction.execute(ManageKeywordAction.java:76) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:595)
mais je ne sais pas vraiment comment la résoudre. Pourtnat, a la fin de chaqsue transaction, je faire bien ma session...
voici mon code :
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 public static void saveKeywords(Applicant appl, String[] key){ Set s = new HashSet(); if (!appl.getKeywords().isEmpty()) s= appl.getKeywords(); Keyword kw = new Keyword(); for (int j = 0; j<key.length; j++){ kw = (Keyword) HibernateUtility.getRow(Keyword.class, "id", new Integer(key[j])); if (kw !=null) s.add(kw); } if (!s.isEmpty()){ appl.setKeywords(s); appl = (Applicant) HibernateUtility.setRow(appl); } }Merci pour l'aide
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
104
105
106
107 /* * HibernateUtility.java * * Created on 18 novembre 2006, 13:43 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package be.qspin.qats.business; import be.qspin.qats.struts.plugin.HibernatePlugIn; import java.util.List; import java.io.Serializable; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Query; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; public class HibernateUtility { /** Creates a new instance of HibernateUtility */ public HibernateUtility() { } /* *provide a hibernate session *@return Session */ public static Session getHibernateSession() { return HibernatePlugIn.getSessionFactory().openSession(); } /* *return an record according to id *@param Class *@param Serializable *@return Object */ public static Object getRow(Class aClass, Serializable id) { Session session = getHibernateSession(); Object obj = session.get(aClass, id); session.close(); return obj; } /* *return one record accoding to parameters *@param Class *@param String *@param String *@return Object */ public static Object getRow(Class aClass, String attributeName, String attributeValue) { Session session = getHibernateSession(); Criteria crit = session.createCriteria(aClass); crit.add(Restrictions.eq(attributeName, attributeValue)); Object obj = crit.uniqueResult(); session.close(); return obj; } public static Object getRow(Class aClass, String attributeName, Integer attributeValue) { Session session = getHibernateSession(); Criteria crit = session.createCriteria(aClass); crit.add(Restrictions.eq(attributeName, attributeValue)); Object obj = crit.uniqueResult(); session.close(); return obj; } /* *return all record *@param Class *@return List */ public static List getRow(Class aClass){ Session session = getHibernateSession(); Criteria crit = session.createCriteria(aClass); List result = crit.list(); session.close(); return result; } /* *record an object *@param Object */ public static Object setRow(Object obj) { Session session = getHibernateSession(); Transaction tx = session.beginTransaction(); session.saveOrUpdate(obj); tx.commit(); session.close(); return obj; } public static List executeRequest(String request){ System.out.println("Display query : "+request); Session session = getHibernateSession(); Query query = session.createSQLQuery(request); return query.list(); } }
Partager