Почему я получаю Быть в спящем режиме LazyInitializationException в этом Spring веб-приложение MVC, когда данные отображаются правильно?

Попытка добавить это в ваш CSS-файл.

body.page-id-1001 div.banner {
 overflow:scroll;
}
11
задан Community 23 May 2017 в 12:14
поделиться

4 ответа

Я просто предполагаю, но от отслеживания стека кажется, что к toString обращаются SearchRule. SearchRule имеет какие-либо дочерние объекты, которые не могли быть загружены? Если SearchRule.toString пытался получить значение для неинициализированного дочернего объекта, который мог бы привести к LazyInitializationException.

5
ответ дан 3 December 2019 в 02:11
поделиться

Hibernate.initialize (список), вызов не инициализирует целевые объекты объекта, на которые ссылаются в наборе. Необходимо было бы выполнить итерации по отчетам и инициализировать каждый отдельный объект. Вызов для инициализации отчетов превращает набор прокси в конкретный набор прокси Отчета. Попробуйте код ниже:

for(Report r : reports)
   Hibernate.initialize(r);

Тупой подход топора должен выключить ленивую загрузку путем добавления lazy="false" к Вашим hbm классам. Это могло бы иметь смысл, если Вы будете всегда выполнять итерации по всему объекту каждый раз его полученного (заставьте инициализацию ступить ОБЕ).

1
ответ дан 3 December 2019 в 02:11
поделиться

Я просто прошел этот марафон LazyInitialization.

Базовая проблема состоит в том, что Вы пытаетесь получить доступ к тому, чтобы быть в спящем режиме - управляемый объект за пределами жизненного цикла Session, т.е. в веб-представлении Spring MVC. В моем случае это было a List<> @OneToMany ассоциация, которые лениво загружаются по умолчанию.

Существует несколько разных подходов - Mark упомянул один, где Вы делаете "фиктивное" повторение по ленивым ассоциациям. Можно также вызвать нетерпеливую загрузку, любого с помощью конфигурации (всего класса) (в JPA, которым это было бы @Fetch(value = FetchType.EAGER)) или более конкретно через HQL. Но это окажется более проблематичным, если Ваши ленивые ассоциации будут Lists.

Самое чистое решение, которое я нашел, состояло в том, чтобы использовать Spring OpenEntityManagerInViewFilter (существует OpenSessionInViewFilter для В спящем режиме) - простой фильтр сервлета, к которому Вы заглядываете web.xml (перед Вашими другими фильтрами сервлета), и Spring автоматически создаст ориентированное на многопотоковое исполнение, осведомленное о транзакции Session НА ЗАПРОС HTTP. Не больше LazyInitializationException!

25
ответ дан 3 December 2019 в 02:11
поделиться

Хорошо я - идиот. Моя проблема, я посмотрел на отслеживание стека, но действительно не считал его. Вот полные отслеживания стека (или один из них, 3 немного отличающихся версии обнаруживаются в моих журналах).

org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
    at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
    at com.generic.orm.generated.SearchRule$$EnhancerByCGLIB$$de674d10.toString(<generated>)
    at java.lang.String.valueOf(String.java:2827)
    at java.lang.StringBuffer.append(StringBuffer.java:219)
    at org.apache.commons.lang.builder.ToStringStyle.appendDetail(ToStringStyle.java:578)
    at org.apache.commons.lang.builder.ToStringStyle.appendInternal(ToStringStyle.java:542)
    at org.apache.commons.lang.builder.ToStringStyle.append(ToStringStyle.java:428)
    at org.apache.commons.lang.builder.ToStringBuilder.append(ToStringBuilder.java:840)
    at org.apache.commons.lang.builder.ReflectionToStringBuilder.appendFieldsIn(ReflectionToStringBuilder.java:606)
    at org.apache.commons.lang.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:759)
    at org.apache.commons.lang.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:287)
    at org.apache.commons.lang.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:121)
    at com.generic.orm.generated.Report.toString(Report.java:141)
    at java.lang.String.valueOf(String.java:2827)
    at java.lang.StringBuilder.append(StringBuilder.java:115)
    at java.util.AbstractCollection.toString(AbstractCollection.java:422)
    at java.lang.String.valueOf(String.java:2827)
    at java.lang.StringBuilder.append(StringBuilder.java:115)
    at java.util.AbstractMap.toString(AbstractMap.java:490)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.recordRequestAttributes(MonitorFilter.java:1376)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.recordRequestData(MonitorFilter.java:1184)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.getDataBefore(MonitorFilter.java:803)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:361)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:167)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:239)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1158)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:808)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

Netbeans, по-видимому, делает некоторый серверный контроль, который называет toString, который волнуется, потому что что-то позвонившее toString не инициализируется правильно. Таким образом, моя проблема два, сворачиваются, отражение базировалось, ToString кажется, что плохая идея для в спящем режиме, pojos и Netbeans изменяют мое поведение во время выполнения путем попытки наблюдать его.

Благодарен за то, что все помогают, я думаю, что просто смотрел на эту проблему слишком тесно слишком долго и должен был отступить для немного.

1
ответ дан 3 December 2019 в 02:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: