Problema com org.hibernate.LazyInitializationException

Bom dia galera!

É o seguinte:

Tenho essas duas classes de entidade:

[code]@Entity
public class TbSolucionador implements java.io.Serializable, Comparable {

private Long id;
private TbDepartamento tbDepartamento;
private String nmLogin;
private String nmSolucionador;
private String flAtivo;
private Set<TbPendencia> tbPendencias = new HashSet<TbPendencia>(0);
private Set<TbFilial> tbFilials = new HashSet<TbFilial>(0);

// Ocultado os construtores para melhor visualização da classe

@Id
@GeneratedValue
@Column(name="ID", unique=true, nullable=false, precision=22, scale=0)
public Long getId() {
    return this.id;
}

public void setId(Long id) {
    this.id = id;
}

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="ID_DEPARTAMENTO", nullable=false)
public TbDepartamento getTbDepartamento() {
    return this.tbDepartamento;
}

public void setTbDepartamento(TbDepartamento tbDepartamento) {
    this.tbDepartamento = tbDepartamento;
}

@Column(name="NM_LOGIN", nullable=false, length=20)
public String getNmLogin() {
    return this.nmLogin;
}

public void setNmLogin(String nmLogin) {
    this.nmLogin = nmLogin;
}

@Column(name="NM_SOLUCIONADOR", nullable=false, length=60)
public String getNmSolucionador() {
    return this.nmSolucionador;
}

public void setNmSolucionador(String nmSolucionador) {
    this.nmSolucionador = nmSolucionador;
}

@Column(name="FL_ATIVO", nullable=false, length=1)
public String getFlAtivo() {
    return this.flAtivo;
}

public void setFlAtivo(String flAtivo) {
    this.flAtivo = flAtivo;
}

@OneToMany(fetch=FetchType.EAGER, mappedBy="tbSolucionador")
public Set<TbPendencia> getTbPendencias() {
    return this.tbPendencias;
}

public void setTbPendencias(Set<TbPendencia> tbPendencias) {
    this.tbPendencias = tbPendencias;
}

@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="TB_SOLUCIONADOR_FILIAL",
	joinColumns = { @JoinColumn(name="ID_SOLUCIONADOR", nullable=false, updatable=false) },
	inverseJoinColumns = { @JoinColumn(name="ID_FILIAL", nullable=false, updatable=false) })
public Set<TbFilial> getTbFilials() {
    return this.tbFilials;
}

public void setTbFilials(Set<TbFilial> tbFilials) {
    this.tbFilials = tbFilials;
}

@Override
public int compareTo(TbSolucionador tbSolucionador) {
	if (this.getId() < tbSolucionador.getId())
		return -1;
	else if (this.getId() > tbSolucionador.getId())
		return 1;
	else
		return 0;
}

}[/code]

[code]@Entity
public class TbFilial implements java.io.Serializable {

private int idFilial;
private String fantasia;
private String endereco;
private String bairro;
private String cidade;
private String uf;
private String telefone;
private Set<TbMetaFilial> tbMetaFilials = new HashSet<TbMetaFilial>(0);
private Set<TbPendencia> tbPendencias = new HashSet<TbPendencia>(0);
private Set<TbSolucionador> tbSolucionadors = new HashSet<TbSolucionador>(0);

// Ocultado os construtores para melhor visualização da classe

@Id 
@Column(name="ID_FILIAL", unique=true, nullable=false, precision=4, scale=0)
public int getIdFilial() {
    return this.idFilial;
}

public void setIdFilial(int idFilial) {
    this.idFilial = idFilial;
}

@OneToMany(fetch=FetchType.EAGER, mappedBy="tbFilial")
public Set<TbMetaFilial> getTbMetaFilials() {
    return this.tbMetaFilials;
}

public void setTbMetaFilials(Set<TbMetaFilial> tbMetaFilials) {
    this.tbMetaFilials = tbMetaFilials;
}

@OneToMany(fetch=FetchType.EAGER, mappedBy="tbFilial")
public Set<TbPendencia> getTbPendencias() {
    return this.tbPendencias;
}

public void setTbPendencias(Set<TbPendencia> tbPendencias) {
    this.tbPendencias = tbPendencias;
}

@Column(name = "FANTASIA", nullable = false, length = 10)
public String getFantasia() {
	return fantasia;
}

public void setFantasia(String fantasia) {
	this.fantasia = fantasia;
}

@Column(name = "ENDERECO", nullable = false, length = 72)
public String getEndereco() {
	return endereco;
}

public void setEndereco(String endereco) {
	this.endereco = endereco;
}

@Column(name = "BAIRRO", nullable = false, length = 72)
public String getBairro() {
	return bairro;
}

public void setBairro(String bairro) {
	this.bairro = bairro;
}

@Column(name = "CIDADE", nullable = false, length = 72)
public String getCidade() {
	return cidade;
}

public void setCidade(String cidade) {
	this.cidade = cidade;
}

@Column(name = "UF", nullable = false, length = 2)
public String getUf() {
	return uf;
}

public void setUf(String uf) {
	this.uf = uf;
}

@Column(name = "TELEFONE", nullable = false, length = 12)
public String getTelefone() {
	return telefone;
}

public void setTelefone(String telefone) {
	this.telefone = telefone;
}

@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="TB_SOLUCIONADOR_FILIAL",
	joinColumns = { @JoinColumn(name="ID_FILIAL", nullable=false, updatable=false) },
	inverseJoinColumns = { @JoinColumn(name="ID_SOLUCIONADOR", nullable=false, updatable=false) })
public Set<TbSolucionador> getTbSolucionadors() {
    return this.tbSolucionadors;
}

public void setTbSolucionadors(Set<TbSolucionador> tbSolucionadors) {
    this.tbSolucionadors = tbSolucionadors;
}

@Override
public boolean equals(Object obj) {
	if (obj == null) return false;
	if (this == obj) return true;
	if (!(obj instanceof TbFilial)) return false;
	
	TbFilial f = (TbFilial)obj;
	
	return this.getIdFilial() == f.getIdFilial();
}

}[/code]
E a seguinte tela:

[code]<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:h=“http://java.sun.com/jsf/html"
xmlns:ui=“http://java.sun.com/jsf/facelets"
template=”/template/main.xhtml”>

<ui:define name="body">
	<f:event listener="#{tbSolucionadorEditMB.isPermitted}" type="preRenderView" />
	<h:form prependId="false">
	
		<p:toolbar>
			<p:toolbarGroup align="left">					
				<p:commandButton value="#{messages['button.save']}" action="#{tbSolucionadorEditMB.update}"
					rendered="#{tbSolucionadorEditMB.updateMode}" ajax="false" />
				<p:commandButton value="#{messages['button.back']}" action="#{tbSolucionadorEditMB.previousView}" immediate="true" ajax="false"/>
				
			</p:toolbarGroup>
		</p:toolbar>

		<br />

		<p:fieldset legend="#{messages['tbSolucionador.label']}" toggleable="false" toggleSpeed="500">
			<h:panelGrid id="fields" columns="3">
				
				<h:outputLabel value="#{messages['tbSolucionador.label.tbDepartamento']} * " for="tbDepartamento" styleClass="text-input" />
				<p:selectOneMenu id="tbDepartamento" value="#{tbSolucionadorEditMB.bean.tbDepartamento}" converter="departamentoConverter">
					<f:selectItems value="#{tbSolucionadorEditMB.departamentoItems}"/>
				</p:selectOneMenu>
				<p:message for="tbDepartamento" />
				
				<h:outputLabel value="#{messages['tbSolucionador.label.nmLogin']} * " for="nmLogin" styleClass="text-input" />
				<p:inputText id="nmLogin" value="#{tbSolucionadorEditMB.bean.nmLogin}" title="#{messages['tbSolucionador.alt.nmLogin']}" maxlength="15"
							validator="#{tbSolucionadorEditMB.validarEspacoBranco}" required="true" requiredMessage="#{messages['mensagem.campo.null']}"/>
				<p:message for="nmLogin"   />
				
				<h:outputLabel value="#{messages['tbSolucionador.label.nmSolucionador']} * " for="nmSolucionador" styleClass="text-input" />
				<p:inputText id="nmSolucionador" value="#{tbSolucionadorEditMB.bean.nmSolucionador}" title="#{messages['tbSolucionador.alt.nmSolucionador']}" 
				             validator="#{tbSolucionadorEditMB.validarEspacoBranco}" maxlength="60"
				             required="true" requiredMessage="#{messages['mensagem.campo.null']}"/>
				<p:message for="nmSolucionador" />
				
				<h:outputLabel value="#{messages['tbSolucionador.label.flAtivo']} * " for="flAtivo" styleClass="text-input" />
				<p:selectOneMenu id="flAtivo" value="#{tbSolucionadorEditMB.bean.flAtivo}">
					<f:selectItem itemLabel="Sim" itemValue="S"/>
					<f:selectItem itemLabel="Não" itemValue="N"/>
				</p:selectOneMenu>
				<p:message for="flAtivo" />
				
				<h:outputLabel value="#{messages['tbSolucionador.label.idFilial']} * " for="idFilial" styleClass="text-input" />
				<p:selectManyMenu id="idFilial" value="#{tbSolucionadorEditMB.bean.tbFilials}" converter="filialConverterSol" style="width:150px;height:200px">
					<f:selectItems value="#{tbSolucionadorEditMB.filiais}" var="filial" itemLabel="#{filial.fantasia}" itemValue="#{filial}"/>
				</p:selectManyMenu>
				<p:message for="idFilial" />
				
			</h:panelGrid>
		</p:fieldset>
	</h:form>
</ui:define>

</ui:composition>[/code]
Quando modifico qualquer campo e tento atualizar ele lança a exceção: [color=red]org.hibernate.LazyInitializationException[/color].

Esse erro ocorre justamente na renderização do [color=blue]<p:selectManyMenu>[/color] quando clico no botão de atualizar. Só que o relacionamento ao qual esse componente refere-se está como eager. O que pode está acontecendo?

Agradeço desde já pela ajuda.

Até mais.

Quatro soluções para LazyInitializationException [=

Legal Hebert, mas já estou usando umas das estratégias desse artigo, que é utilizar o Fetch Strategy Eager. Porém nada adiantou.

Estou tentando usar Open Session In View, mas uso o Framework Demoiselle e estou apanhando muito pra fazer.

Você já usou o Open Session In View no Demoiselle Hebert?

[quote=Thyaggo]Legal Hebert, mas já estou usando umas das estratégias desse artigo, que é utilizar o Fetch Strategy Eager. Porém nada adiantou.

Estou tentando usar Open Session In View, mas uso o Framework Demoiselle e estou apanhando muito pra fazer.

Você já usou o Open Session In View no Demoiselle Hebert?[/quote]Não, nunca.

kkkkkkkk… Blz! Valeu pela dica do artigo do rapaz.