주석과 최대 절전 모드로 Spring 3에 몇 가지 문제가 있습니다.Spring 3 + LazyInitializationException + OpenSessionInViewFilter
다른 모든 JSP에 포함될 JSP에서 이것을 실행하려고하면이 헤더가 헤더에 포함됩니다. 내가 제대로 주석 컨트롤러 또는 서비스에서 getNotifications를 호출 할 경우
${pageContext['request'].userPrincipal.principal.notifications}
내 사용자 POJO 나는 아무 문제가 없다,이
@OneToMany(mappedBy="user", fetch = FetchType.LAZY)
protected Collection<Notification> notifications;
같은 통지와 관계를 가지고,하지만 난을 실행하기 위해 노력하고있어 때 JSP로 insede 코드는,이 하나의 같은 LazyInitializationException이받은 :
org.hibernate.LazyInitializationException: failed to lazily initialize a
collection of role: org.prog.para.model.pojo.user.User.notifications, no session or
session was closed
내가 OpenSessionInViewFilter에 대해 읽을 수 있지만 작동하지 않는 이유를 모르겠어요.
내 web.xml의 :
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/app-config.xml
/WEB-INF/spring/security-config.xml
</param-value>
</context-param>
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
<servlet>
<servlet-name>para-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/mvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>para-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
내 응용 프로그램-config.xml 파일은 다음과 같습니다
<context:component-scan base-package="org.prog.para">
<context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation" />
</context:component-scan>
<!-- Datasource -->
<import resource="ds-config.xml" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="org.prog.para.model.pojo" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.default_schema">schema</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="hibernateTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="hibernateTransactionManager"
proxy-target-class="true" mode="proxy" />
<bean id="emailTemplateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<property name="prefix" value="/WEB-INF/views/templates/" />
<property name="suffix" value=".html" />
<property name="characterEncoding" value="UTF-8" />
<property name="order" value="1" />
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
<property name="templateResolvers" ref="emailTemplateResolver" />
</bean>
<bean id="viewResolver" class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
<property name="characterEncoding" value="UTF-8" />
</bean>
<bean id="springApplicationContext" class="org.prog.para.config.SpringApplicationContext" />
사람은 나의 실패 곳을 알고있다? 보기가 실행될 때 내 세션이 닫히는 이유를 이해할 수 없습니다.
FetchType.EAGER를 알림 컬렉션에 넣는 방법으로 해결할 수 있지만 원하는 것은 아닙니다. 나는 게으른 관계가 필요합니다.
미리 감사드립니다.
해당 서비스에 대한 @ 트랜잭션 설정은 무엇입니까? – mmalmeida