2012-01-08 12 views
6

Sto creando un amministratore del portale di lavoro. Sto usando spring + hibernate. Ho creato la pagina per lavoro aggiuntivo, si sta lavorando bene, ma quando io sto usando la stessa pagina per la modifica di posti di lavoro, che mi sta dando eccezione:Nessun proxy di sessione in sospensione e molla

org.hibernate.LazyInitializationException: could not initialize proxy - no Session 
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:132) 
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:174) 
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190) 
    at com.jobs.admin.data.Company_$$_javassist_5.toString(Company_$$_javassist_5.java) 
    at org.springframework.util.ObjectUtils.nullSafeToString(ObjectUtils.java:560) 
    at org.springframework.util.ObjectUtils.getDisplayString(ObjectUtils.java:506) 
    at org.springframework.web.servlet.tags.form.SelectedValueComparator.exhaustiveCompare(SelectedValueComparator.java:178) 
    at org.springframework.web.servlet.tags.form.SelectedValueComparator.isSelected(SelectedValueComparator.java:103) 
    at org.springframework.web.servlet.tags.form.OptionTag.isSelected(OptionTag.java:243) 
    at org.springframework.web.servlet.tags.form.OptionTag.renderOption(OptionTag.java:211) 
    at org.springframework.web.servlet.tags.form.OptionTag.renderFromBodyContent(OptionTag.java:161) 
    at org.springframework.web.servlet.tags.form.AbstractHtmlElementBodyTag.doEndTag(AbstractHtmlElementBodyTag.java:66) 
    at org.apache.jsp.WEB_002dINF.jsp.admin.addJob_jsp._jspService(addJob_jsp.java:735) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292) 
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1060) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
    at java.lang.Thread.run 

(Thread.java:619) 

mia classe controller sta avendo due metodi, uno per l'aggiunta di lavoro e uno per modificare quel lavoro. Perché questo sta accadendo, per favore dacci qualche suggerimento.

risposta

3

perché questo sta accadendo:

Sembra che in una JSP viene richiamato il metodo di CompanytoString. Questo fa scattare un oggetto (azienda) da caricare (viene caricato solo Layz). Poiché non hai una sessione di sospensione in JSP, ottieni questo errore.

dare qualche suggerimento:

3

tuo entità (com.jobs.admin.data.Company) è pigramente inizializzato. Significa che alcuni membri non sono stati realmente inizializzati, ma Hibernate ha invece messo un proxy e sta mettendo i valori reali su richiesta.

Dopo che l'entità viene caricata dal database, si chiude la Sessione, quindi i membri che sono stati proxy, non sono stati inizializzati! E ora chiami com.jobs.admin.data.Company.toString() che utilizza membri che sono stati proxy. Quindi ottieni l'eccezione.

alcuni suggerimenti:

  1. separata la logica in strati. Non esporre i tuoi oggetti entità direttamente al livello dell'interfaccia utente. Una volta che hai un oggetto separato, dovrai copiare dall'entità sull'oggetto dell'interfaccia utente, lo fai durante la sessione aperta, quindi non dovresti mai ottenere questa eccezione e tutto diventa più chiaro.
  2. Non utilizzare mai i membri con il carico pigro nei metodi toString(). toString() può essere chiamato in modo abbastanza imprevedibile, ad esempio durante la registrazione e così via. Difficilmente saprai se hai una sessione aperta durante questo periodo o meno.
Problemi correlati