JSF Prime Faces,Spring 3,Hibernate 4 - org.hibernate.LazyInitializationException

时间:2014-01-23 11:33:00

标签: java spring jsf hibernate-4.x

我看到很多关于这个主题的帖子。经过2天的阅读,我在我的智慧结束时

看起来很简单。会话关闭,然后JSF去渲染延迟加载的集合,无法使用会话。

我错过了什么?我疯了

的web.xml

 <filter>
    <filter-name>hibernateFilter</filter-name>
      <filter-  class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
      <init-param>
        <param-name>sessionFactoryBeanName</param-name>
        <param-value>sessionFactory</param-value>         
      </init-param>
  </filter>
     <filter-mapping>
     <filter-name>hibernateFilter</filter-name>
     <url-pattern>/*</url-pattern>
     </filter-mapping>

的applicationContext.xml

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
      <property name="sessionFactory" ref="sessionFactory"/>
</bean>
        <tx:annotation-driven transaction-manager="transactionManager" />
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />

   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                <property name="driverClassName" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost/dbname" />
                <property name="username" value="username" />
                <property name="password" value="password" />
   </bean> 
           <bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
                <property name="dataSource" ref="dataSource" />
                <property name="configLocation">
                <value>/hibernate.cfg.xml</value>
                </property>
            </bean>

服务层

@Transactional(readOnly = true, propagation = Propagation.REQUIRED)
public List<Order> findAll() {
    return orderDAO.findAll();
}

OrderDAO.java

public List<T> findAll() {
    return sessionFactory.getCurrentSession().createCriteria(getReferenceClass()).list();
}

Order.java

@Entity
@Table(
    name="orders"   
)
@Access(AccessType.FIELD)
public class Order implements Serializable, Data {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private long id;

    @OneToMany(mappedBy = "order", fetch = FetchType.LAZY)
    private List<PrimaryKeyword> primKeywords;

    @Override
    public long getId() {
        return id;
    }

    public void addToPrimKeywords(PrimaryKeyword primKeyword) {
        if (primKeywords == null) {
            primKeywords = new ArrayList<PrimaryKeyword>();
        }
        this.primKeywords.add(primKeyword);
    }

    public List<PrimaryKeyword> getPrimKeywords() {
        return primKeywords;
    }
}

堆栈跟踪

    INFO: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.ardor.data.Order.primKeywords, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.ardor.data.Order.primKeywords, no session or session was closed
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:394)
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:386)
    at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:126)
    at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:242)
    at javax.faces.model.ListDataModel.isRowAvailable(ListDataModel.java:109)
    at javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:184)
    at javax.faces.model.ListDataModel.setWrappedData(ListDataModel.java:219)
    at javax.faces.model.ListDataModel.<init>(ListDataModel.java:78)
    at com.sun.faces.facelets.component.UIRepeat.getDataModel(UIRepeat.java:258)
    at com.sun.faces.facelets.component.UIRepeat.setIndex(UIRepeat.java:444)
    at com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:483)
    at com.sun.faces.facelets.component.UIRepeat.processDecodes(UIRepeat.java:755)
    at org.primefaces.component.api.UIData.process(UIData.java:322)
    at org.primefaces.component.api.UIData.processChildren(UIData.java:305)
    at org.primefaces.component.api.UIData.processPhase(UIData.java:267)
    at org.primefaces.component.api.UIData.processDecodes(UIData.java:231)
    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
    at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:506)
    at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1612)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
    at javax.faces.component.UIForm.visitTree(UIForm.java:371)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
    at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
    at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
    at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:57)
    at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:928)
    at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:98)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:180)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:149)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

0 个答案:

没有答案