-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Illegal attempt to associate a collection with two open sess
PostPosted: Sun Jan 09, 2005 10:24 am 
Senior
Senior

Joined: Wed Dec 17, 2003 4:24 am
Posts: 188
Hi everyone:

I want to save and update two object in one method.I use the code:


Code:
public boolean insertArticle(Article a, User u){
      boolean  obj_id = false;
       
   
         User user=null;
         Object o=null;
         try {
            o = this.getHibernateTemplate().createQuery(this.getSession(),
                  "from User u where u.userName='" + u.getUserName() + "'")
                  .uniqueResult();
         } catch (HibernateException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
         }
         if(null!=o){
            user=(User)o;
         }
         a.setUser(user);
         Set articleSet=user.getArticleSet();
         
         if(null!=articleSet){
            articleSet.add(a);
         }else{
            articleSet=new HashSet();
            articleSet.add(a);
         }
         user.setArticleSet(articleSet);
         
         try {
             
            //Object id=this.getHibernateTemplate().save(a);
            //log.info("Saving id: "+id);
             
            this.getHibernateTemplate().update(user);
            obj_id=true;
         } catch (DataAccessResourceFailureException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }  catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }         


But I get a Exception:

Code:
org.springframework.orm.hibernate.HibernateSystemException: Illegal attempt to a
ssociate a collection with two open sessions; nested exception is net.sf.hiberna
te.HibernateException: Illegal attempt to associate a collection with two open s
essions
net.sf.hibernate.HibernateException: Illegal attempt to associate a collection w
ith two open sessions
        at net.sf.hibernate.collection.PersistentCollection.setCurrentSession(Pe
rsistentCollection.java:257)
        at net.sf.hibernate.impl.OnUpdateVisitor.processCollection(OnUpdateVisit
or.java:38)
        at net.sf.hibernate.impl.AbstractVisitor.processValue(AbstractVisitor.ja
va:69)
        at net.sf.hibernate.impl.AbstractVisitor.processValues(AbstractVisitor.j
ava:36)
        at net.sf.hibernate.impl.AbstractVisitor.process(AbstractVisitor.java:93
)
        at net.sf.hibernate.impl.SessionImpl.doUpdateMutable(SessionImpl.java:14
56)
        at net.sf.hibernate.impl.SessionImpl.doUpdate(SessionImpl.java:1470)
        at net.sf.hibernate.impl.SessionImpl.update(SessionImpl.java:1355)
        at org.springframework.orm.hibernate.HibernateTemplate$15.doInHibernate(
HibernateTemplate.java:339)
        at org.springframework.orm.hibernate.HibernateTemplate.execute(Hibernate
Template.java:176)
        at org.springframework.orm.hibernate.HibernateTemplate.update(HibernateT
emplate.java:336)
        at lyo.hotmail.site.service.ForumDAOImpl.insertArticle(ForumDAOImpl.java
:139)
        at lyo.hotmail.site.action.PostArticleController.handleRequest(PostArtic
leController.java:74)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.ha
ndle(SimpleControllerHandlerAdapter.java:44)
        at org.springframework.web.servlet.DispatcherServlet.doService(Dispatche
rServlet.java:495)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkSer
vlet.java:321)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:237)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:157)
        at lyo.hotmail.site.util.HiberFilter.doFilter(HiberFilter.java:50)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:186)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:157)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:214)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
        at org.apache.catalina.core.StandardContextValve.invokeInternal(Standard
ContextValve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:152)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica
torBase.java:462)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:102)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:137)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:118)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:102)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:109)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)

        at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:16
0)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:799)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ssConnection(Http11Protocol.java:705)
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java
:577)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:684)
        at java.lang.Thread.run(Thread.java:534)


I use Hibernate with Spring . If someone had come across this problem ,please help

_________________
You are not alone...


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jan 10, 2005 11:47 am 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
you cannot basically do
Code:
Session s1;
Session s2;
s1 = openSession();
s2 = openSession();
a = (A) s.load(A.class, id);
a2.setBs( a.getBs() );
s2.update(a2);


The collection must stay associated with A opened session at a time.

_________________
Emmanuel


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.