java - Strange Lazy initialization exception -
i getting lazy initialization exception don't understand...
i work java, hibernate, spring , wicket.
so, save method of form (extends wicket form) lazyinitializationexception
when accesing colletion of object, right away can access collection of same object has same "configuration" collection fires exception:
here code in form:
therapygroup.gettherapies().clear(); therapygroup.gettherapies().addall(therapiesoldgroup); therapygroup.gettoxicities().add(lasttherapy.gettoxicity());
and here part collections defined in class:
@onetomany(mappedby = "therapygroup", fetch = fetchtype.lazy, orphanremoval=true) @cascade(value = { cascadetype.merge, cascadetype.persist, cascadetype.delete, cascadetype.save_update }) @orderby(value = "date asc") @filters( { @filter(name = "deletedfilter", status = "deleted <> :deletedparam") }) @cache(usage = cacheconcurrencystrategy.transactional, part = "therapygroup") @lazy public set<therapy> gettherapies() { homecoming therapies; } @onetomany(mappedby = "therapygroup", fetch = fetchtype.lazy, orphanremoval=true) @cascade(value = { cascadetype.merge, cascadetype.persist, cascadetype.delete, cascadetype.save_update }) @orderby(value = "date asc") @filters( { @filter(name = "deletedfilter", status = "deleted <> :deletedparam") }) @cache(usage = cacheconcurrencystrategy.transactional, part = "therapygroup") @lazy public set<toxicity> gettoxicities() { homecoming toxicities; }
the "problematic" collection toxicities collection. if swap order , phone call toxicities first, throws lazyinitializationexception
. exception fired toxicities , not therapies... why?
edit: here's stack trace
root cause:
org.hibernate.lazyinitializationexception: failed lazily initialize collection of role: com.mycompany.myapp.data.therapygroup.toxicities, no session or session closed @ org.hibernate.collection.abstractpersistentcollection.throwlazyinitializationexception(abstractpersistentcollection.java:383) @ org.hibernate.collection.abstractpersistentcollection.throwlazyinitializationexceptionifnotconnected(abstractpersistentcollection.java:375) @ org.hibernate.collection.abstractpersistentcollection.initialize(abstractpersistentcollection.java:368) @ org.hibernate.collection.persistentset.add(persistentset.java:212) @ com.mycompany.myapp.web.support.therapyend.therapyendsupportform.onsaveformdata(therapyendsupportform.java:135) @ com.mycompany.myapp.web.base.baseform.dosave(baseform.java:370) @ com.mycompany.myapp.web.base.baseform.saveandtrigger(baseform.java:1137) @ com.mycompany.myapp.web.base.baseform.switchmodalwindow(baseform.java:1128) @ com.mycompany.myapp.web.base.baseform.switchmodalwindow(baseform.java:1077) @ com.mycompany.myapp.web.base.baseform.onsubmit(baseform.java:567) @ com.mycompany.myapp.web.comp.quasiajaxsubmitbutton.onsubmit(quasiajaxsubmitbutton.java:49) @ com.mycompany.myapp.web.comp.quasiajaxbutton$1.onsubmit(quasiajaxbutton.java:65) @ com.mycompany.myapp.web.comp.quasiajaxformsubmitbehavior.onevent(quasiajaxformsubmitbehavior.java:151) @ org.apache.wicket.ajax.ajaxeventbehavior.respond(ajaxeventbehavior.java:177) @ org.apache.wicket.ajax.abstractdefaultajaxbehavior.onrequest(abstractdefaultajaxbehavior.java:286) @ org.apache.wicket.request.target.component.listener.behaviorrequesttarget.processevents(behaviorrequesttarget.java:119) @ org.apache.wicket.request.abstractrequestcycleprocessor.processevents(abstractrequestcycleprocessor.java:92) @ org.apache.wicket.requestcycle.processeventsandrespond(requestcycle.java:1250) @ org.apache.wicket.requestcycle.step(requestcycle.java:1329) @ org.apache.wicket.requestcycle.steps(requestcycle.java:1428) @ org.apache.wicket.requestcycle.request(requestcycle.java:545) @ org.apache.wicket.protocol.http.wicketfilter.doget(wicketfilter.java:479) @ org.apache.wicket.protocol.http.wicketfilter.dofilter(wicketfilter.java:312) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1139) @ org.springframework.orm.jpa.support.openentitymanagerinviewfilter.dofilterinternal(openentitymanagerinviewfilter.java:113) @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:76) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1139) @ org.mortbay.jetty.servlet.servlethandler.handle(servlethandler.java:378) @ org.mortbay.jetty.security.securityhandler.handle(securityhandler.java:216) @ org.mortbay.jetty.servlet.sessionhandler.handle(sessionhandler.java:181) @ org.mortbay.jetty.handler.contexthandler.handle(contexthandler.java:765) @ org.mortbay.jetty.webapp.webappcontext.handle(webappcontext.java:417) @ org.mortbay.jetty.handler.handlerwrapper.handle(handlerwrapper.java:152) @ org.mortbay.jetty.server.handle(server.java:324) @ org.mortbay.jetty.httpconnection.handlerequest(httpconnection.java:535) @ org.mortbay.jetty.httpconnection$requesthandler.content(httpconnection.java:880) @ org.mortbay.jetty.httpparser.parsenext(httpparser.java:747) @ org.mortbay.jetty.httpparser.parseavailable(httpparser.java:218) @ org.mortbay.jetty.httpconnection.handle(httpconnection.java:404) @ org.mortbay.jetty.bio.socketconnector$connection.run(socketconnector.java:228) @ org.mortbay.thread.queuedthreadpool$poolthread.run(queuedthreadpool.java:520)
com.mycompany.myapp.web.support.therapyend.therapyendsupportform.onsaveformdata(therapyendsupportform.java:135)
line phone call therapygroup.gettoxicities().add(lasttherapy.gettoxicity());
set breakpoint in both methods. when run code, you'll see somewhere, gettherapies()
called within of transaction. means have collection there , hibernate utilize instead of trying load database when phone call method within of save()
.
the same isn't true gettoxicities()
. hibernate tries load there no current transaction, loading fails. create sure save()
gets transaction somewhere. maybe forgot annotation somewhere?
java spring hibernate wicket lazy-initialization
No comments:
Post a Comment