Monday, 15 April 2013

java - Strange Lazy initialization exception -



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