JSF + Hibernate Problema

Pessoal Preciso de uma ajuda urgente…

estou tomando pau do JSF com o Hibernate estava tudo funcionando normal até eu criar um novo metodo…

segue abaixo o codigo…

ERRO

[code]javax.servlet.ServletException: failed to lazily initialize a collection of role: br.com.comax.bean.cliente.ClienteBean.clientesContatoBean, no session or session was closed
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

root cause

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.comax.bean.cliente.ClienteBean.clientesContatoBean, no session or session was closed
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:97)
org.hibernate.collection.PersistentBag.size(PersistentBag.java:225)
javax.faces.model.ListDataModel.isRowAvailable(ListDataModel.java:99)
javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:174)
javax.faces.model.ListDataModel.setWrappedData(ListDataModel.java:209)
javax.faces.model.ListDataModel.(ListDataModel.java:68)
javax.faces.component.UIData.getDataModel(UIData.java:1069)
javax.faces.component.UIData.setRowIndex(UIData.java:417)
com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:85)
javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:788)
javax.faces.component.UIData.encodeBegin(UIData.java:879)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:245)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
[/code]

METODO
DAO

public ClienteBean findByCPF(ClienteBean clienteBean) {

		Session session = HibernateFactory.getInstance().openSession();
		Transaction tx = session.beginTransaction();
		Criteria criteria = session.createCriteria(ClienteBean.class);
		criteria.add(Expression.eq("cpf", clienteBean.getCpf()));
		ClienteBean resultado = (ClienteBean) criteria.uniqueResult();
		tx.commit();
		session.close();
		return resultado;
	}

ClienteBean

@OneToMany(mappedBy = "clienteBean", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Collection<ClientesContatoBean> clientesContatoBean = new ArrayList<ClientesContatoBean>();

ClientesContatoBean

@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "cliente_id", insertable = true, updatable = true) @Fetch(FetchMode.JOIN) @Cascade(CascadeType.ALL) private ClienteBean clienteBean;

Boa tarde…
Para chamar um relacionamento 1-n você precisa estipular o FetchType.Eager.
Caso você tenha um FetchType.Lazy, você deve executar uma nova chamada antes de tentar o acesso dos objetos n.

Abraços.

entendi e não entendi…
eu ja achei o erro com o que vc disse mas não sei como solucionar vc poderia me dar um exemplo…

Meu erro é ao fazer isso

	 cliente.getClientesContatoBean();
	 cliente.getClienteTaxaDeValoresBean();

como conseguiria fazer o certo com lazy?

@OneToMany(mappedBy = "clienteBean", fetch = FetchType.EAGER)  
@Cascade(CascadeType.ALL)  
private Collection<ClientesContatoBean> clientesContatoBean = new ArrayList<ClientesContatoBean>();

ou no teu criteria você chama o método:

public Criteria setFetchMode(String associationPath,
                             FetchMode mode)
                      throws HibernateException

olá resolvi o problema usando filtros…