Hibernate Lazy - duvida

Estou com um problema e preciso da ajuda de vocês para me darem uma sugestão e tirarem uma duvida.

Eu tenho o seguinte model:

[code]@Entity
@Table(name = “ramais”)
public class Ramais implements Serializable {

@Id
private String numero;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "tipo")
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private TipoRamal tipo;

@OneToMany(mappedBy = "ramal", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
private List<Usuarios> usuarios;[/code]

E esta funcionando perfeitamente. E utilizo ela para varias coisas, e esse usuarios que esta como LAZY, preciso apenas para para a tabela de ramais, onde me traz o ramal e os usuarios dele. Porem, só funciona na primeira pagina, a partir da segunda a sessao ja esta fechada.

<display:table name="${ramais}" pagesize="15" export="true" id="ramais" style="width: 40%"> <display:setProperty name="paging.banner.placement" value="bottom" /> <display:column property="numero" title="Nº" /> <display:column title="Usuarios" > <c:choose> <c:when test="${!empty ramais.usuarios}" > <c:forEach items="${ramais.usuarios}" var="user"> <a href="/mz-ti/sUser.do?word=${user.nome}">${user.nome}</a><br> </c:forEach> </c:when> <c:otherwise> Livre </c:otherwise> </c:choose> </display:column> <display:column media="html" style="text-align: right"> <div id="cad"> <html:form action="/altUser.do" > <html:radio property="btenviar" value="Alterar" >Alterar</html:radio> <html:radio property="btenviar" value="Excluir" >Excluir</html:radio> <html:hidden property="ramal.numero" value="${ramais.numero}" /> <span class="botao"> <html:submit value="Ok" /> </span> </html:form> </div> </display:column> </display:table>

Bom…

Duvida, tem como eu fazer a action me trazer a lista de ramais ja com os LAZYs preenchidos??

Sugestão, vocês tem alguma outra sugestão para me dar??? Eu queria evitar de trazer tudo na mesma pagina, para ela não ficar muito extensa.

Valew pela ajuda.

(Terceira vez que posto esse link aqui hoje, pelo jeito o pessoal não curte usar um Search)

Já ouviu falar de OpenSessionInView? É exatamente o que você precisa.

Ja estou usando.

Mas depois que carrega a primeira pagina, o resto não é carregado. Então quando chamo a segunda ele da esse erro.

Poste o erro. Se for “could not initialize proxy - the owning Session was closed” você não implementou o pattern corretamente.

Então o problema é esse mesmo.

Mas talvez tenha a ver com a forma que a DisplayTag trabalha. Porque na primeira pagina é exibida corretamente. A partir da segunda ele ja não traz mais.

O filtro esta igualzinho o do link, com a excessão dos LOGs que eu removi.

Se tivesse algo errado, acredito que ele não exibiria nem a primeira, como acontecia antes de eu implementar essa solução.

O erro:

[code]javax.servlet.ServletException: org.apache.jasper.JasperException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: MZSuporte.model.Ramais.usuarios, no session or session was closed
MZSuporte.dao.DaoInterceptor.doFilter(DaoInterceptor.java:46)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

org.apache.jasper.JasperException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: MZSuporte.model.Ramais.usuarios, 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)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
filtros.FiltroAdminLogin.doFilter(FiltroAdminLogin.java:31)
MZSuporte.dao.DaoInterceptor.doFilter(DaoInterceptor.java:31)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: MZSuporte.model.Ramais.usuarios, 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.isEmpty(PersistentBag.java:232)
org.apache.el.parser.AstEmpty.getValue(AstEmpty.java:53)
org.apache.el.parser.AstNot.getValue(AstNot.java:42)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:925)
org.apache.jsp.admin.busca.sRamais_jsp._jspx_meth_c_005fwhen_005f0(sRamais_jsp.java:390)
org.apache.jsp.admin.busca.sRamais_jsp._jspx_meth_c_005fchoose_005f0(sRamais_jsp.java:360)
org.apache.jsp.admin.busca.sRamais_jsp._jspx_meth_display_005fcolumn_005f1(sRamais_jsp.java:327)
org.apache.jsp.admin.busca.sRamais_jsp._jspService(sRamais_jsp.java:195)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
filtros.FiltroAdminLogin.doFilter(FiltroAdminLogin.java:31)
MZSuporte.dao.DaoInterceptor.doFilter(DaoInterceptor.java:31)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
[/code]