LazyInitializationException - Jsf 2 + Spring 3 + Hibernate 3

Pessoal…

Não sei mais como resolver esse problema. Segui milhoes de tutorias mas, nenhum deles serviu para solucionar o meu problema.

Vamos lá…

1-Tenho uma entidade mapeada assim:

package sigpr.modelo.bean;

import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "XXXX_TURMA")
public class Turma implements java.io.Serializable {

   private static final long serialVersionUID = 1L;

   @Id
   @GeneratedValue
   @Column(name = "NU_TURMA")
   private Integer nuTurma;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "NU_CAPACITACAO")
   private Capacitacao capacitacao;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "NU_ORCAMENTO")
   private Orcamento orcamento;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "NU_EMPRESA")
   private Empresa empresa;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "NU_INSTRUTOR")
   private Instrutor instrutor;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "NU_UF")
   private Estado estado;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "NU_CIDADE")
   private Cidade cidade;

2-Faço uma consulta de todas as turmas

3-Ao editar alguma turma apresenta esse erro:

web.xml

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

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<context:component-scan base-package=“sigpr.modelo”>
<context:include-filter type=“annotation” expression=“org.springframework.stereotype.Service”/>
<context:include-filter type=“annotation” expression=“org.springframework.stereotype.Repository”/>
</context:component-scan>

	<bean id="messageSource"
	class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
	<property name="basename" value="org/springframework/security/messages_pt.BR"/>
</bean>

<bean id="GPRDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
	<property name="jndiName">
		<value>java:comp/env/jdbc/DSGPRDB001</value>
	</property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" 
	p:dataSource-ref="GPRDataSource" 
	p:configLocation="classpath:hibernate.cfg.xml"/>

<bean id="transactionManager"
	class="org.springframework.orm.hibernate3.HibernateTransactionManager"    	
	p:sessionFactory-ref="sessionFactory"/>   

<tx:annotation-driven transaction-manager=“transactionManager” />

[/code]

Aguardo ajuda de vocês, porque não sei mais como resolver isso.

}

Pessoal…

Tenho lido que posso evitar essa exceção aumentando o tempo de vida de meus beans, ou seja, o escopo.

Pra teste, coloquei o scope como session mas, a exceção continua apresentando.

Não tem nada haver com o escopo do seu MB.

Vc sabe para que serve o Lazy que você tanto colocou?

 @ManyToOne(fetch = FetchType.LAZY)

Quando você recupera esse objeto no DB e envia para página, nenhum deles ainda foi carregado e como eles estão na página a sessão do DB já foi encerrada (caso não use Open Session in View).

Pq você não faz um teste, arranca todos os Lazy.

Amigo,

coloca no seu método do editar isso…

turma = seuDao.getById(turma.getNuTurma());

Assim ele vai abrir uma nova sessão e vai recuperar o objeto.

Faço isso aqui e sempre resolveu.

Abraço.