Pessoal, bom dia!
Tenho um relacionamento N para N da seguinte forma:
No banco são tres tabelas: pessoa, grupo e pessoa_grupo
No Sistema tenho apenas duas classes com o seguinte código:
Classe Grupo:
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“pessoa_has_grupo”, schema=“cerimonial”, joinColumns={@JoinColumn(name=“grupo_id”)},
inverseJoinColumns={@JoinColumn(name=“pessoa_id”)})
public Collection getPessoa() {
return pessoa;
}
Classe Pessoa:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = “pessoa_has_grupo”, schema=“cerimonial”, joinColumns = {@JoinColumn(name = “pessoa_id”)},
inverseJoinColumns = {@JoinColumn(name = “grupo_id”)})
public Collection getGrupo() {
if (grupo == null)
grupo = new ArrayList();
return grupo;
}
Na tela do sofware, quando mando ele buscar todas as pessoas cadastradas em um determinado grupo acontece o seguinte erro:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: org.apache.jasper.JasperException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.cerimonial.dominio.Grupo.pessoa, no session or session was closed
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)
root cause
org.apache.jasper.JasperException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.cerimonial.dominio.Grupo.pessoa, no session or session was closed
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
...
root cause
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.cerimonial.dominio.Grupo.pessoa, no session or session was closed
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected
…
A consulta que estou executando é a seguinte:
public String listarPessoas() throws Exception {
if (getGrupo() != null && getGrupo().getId() != null) {
try {
Session sessao = HibernateUtil.getSessao();
Integer idGrupo = getGrupo().getId();
List<Grupo> consulta;
consulta = sessao.createCriteria(Grupo.class).
add(Expression.eq("id", idGrupo)).
list();
setListaGrupo(consulta);
} finally {
HibernateUtil.fechar();
}
}
return SUCCESS;
}
A questão é seguinte: Porque está acontecendo este erro?