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