![](/img/trans.png)
[英]Hibernate/Spring3: could not initialize proxy - no Session
[英]No session proxy in hibernate and spring
我正在创建一个职位门户管理员。 我正在使用spring + hibernate。 我已经创建了添加作业的页面,它工作正常,但是当我使用相同的页面编辑作业时,它给了我例外:
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)
我的控制器类有两个方法,一个用于添加作业,一个用于编辑该作业。 为什么会这样,请提出一些建议。
为什么会这样:
看起来在JSP中调用了Company
的toString
方法。 这会触发(公司)对象加载(它只是layz加载)。 因为JSP中没有hibernate会话,所以会出现此错误。
提出一些建议:
OpenSessionInViewFilter
或OpenEntityManagerInViewFilter
你的实体( com.jobs.admin.data.Company
)被懒惰地初始化了。 这意味着一些成员并没有真正初始化,但Hibernate代替了代理,它将按需提供真正的价值。
从数据库加载实体后,关闭会话,因此代理编辑的成员未初始化! 现在,您调用com.jobs.admin.data.Company.toString()
,它使用代理编辑的成员。 所以你得到了例外。
几点建议:
toString()
方法中使用延迟加载的成员。 可能会非常不可预测地调用toString()
,例如在日志记录期间等。 你很难知道你在这段时间内是否有开放的会议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.