Org.hibernate.LazyInitializationException

4 respostas
M

Pessoal,

Estou brincando com o spring 2.5 + JPA (com hibernate) + postgres e quando tento acessar o valor de algum atributo da minha entidade que esta com fetch=FetchType.LAZY ele da erro org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: lavor.entidade.Pedido.itensPedido, no session or session was closed

Que fica claro que a sessão foi finalizada. uma busca pelo google + forum achei a solução com vários reports de sucesso manda adicionar as seguintes linhas ao web.xml

[google]

openEntityManager

org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter



openEntityManager
/*

[/google]

Eu adicionei e recompilei a aplicação e mesmo assim continuo com o erro.

Aguém tem alguma ideia do que pode ser ?

Obrigado,

Marcelo Gomes

4 Respostas

M

Ops.: meu web.xml completo…

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <context-param>
        <param-name>com.sun.faces.verifyObjects</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>com.sun.faces.validateXml</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
    </context-param>

    <!-- Rich faces -->
    <context-param>
        <param-name>org.richfaces.SKIN</param-name>
        <!--<param-value>blueSky</param-value> -->
        <param-value>emeraldTown</param-value>
    </context-param>

    <context-param>
        <param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
        <param-value>true</param-value>
    </context-param>

    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.DEVELOPMENT</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.SKIP_COMMENTS</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:/applicationContext.xml, WEB-INF/webContext.xml</param-value>
    </context-param>
    <filter>
        <display-name>RichFaces Filter</display-name>
        <filter-name>richfaces</filter-name>
        <filter-class>org.ajax4jsf.Filter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>richfaces</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>

    <!-- Fim RichFaces -->

    <filter>
        <filter-name>openEntityManager</filter-name>
        <filter-class>
            org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>openEntityManager</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>forwardToJSF.jsp</welcome-file>
    </welcome-file-list>
</web-app>
Mero_Aprendiz

Olá.
Esse erro ocorre porque a sessão que você buscou a entidade já está fechada. O fato de ter adicionado o OpenEntityManagerInViewFilter no seu web.xml talvez não ajude muito, já que você pode ter fechado a sessão no seu DAO, por exemplo.
Acredito que o OpenEntityManagerInViewFilter não é apenas uma classe a ser adicionada no seu web.xml, mas sim uma estrategia para ser usada, por isso, dê mais um lidinha sobre, a faça a adequação no seu projeto. =]

[]'s
JL

M

Então… mas eu não estou fechando… estou usando um daogenerico com tudo injetado.

veja o metodo que faço a busca

@SuppressWarnings("unchecked")
    public List<T> listPesqParam(String query, Map<String, Object> params) {
        Query q = getEntityManager().createQuery(query);
        for (String chave : params.keySet()) {
            q.setParameter(chave, params.get(chave));

        }
        return q.getResultList();
    }
M

Obs.: O Dao Generico é o do livro “Dominando Java Server Faces e Facelets: Utilizando Spring 2.5”

Abraço,

Marcelo Gomes

Criado 1 de fevereiro de 2010
Ultima resposta 3 de fev. de 2010
Respostas 4
Participantes 2