ola pessoal ha um tempo atras estava com problema com fechamento de sessão no hibernate pois havia muitos relacionamentos OneToMany e a sessão era fechada dava erro pois os OneToMany’s estavam ainda sendo populados. Em seguida adotei o padrão OSV (open session in view) recomendado pelo hibernate e configurei o xml da aplicação adicionando um filtro apontando pra classe que eu peguei no site do hibernate. Até ai tudo bem, voltei meus OneToMany(ante eu tinha comentado para funcionar) e funcionaou com o filter mas o problema é que mesmo sendo OneToMany Lazy ao verificar as bags ele esta populando tudo!!! ja sai espalhando lazy em tudo mas mesmo assim o bendito tras os objetos porque será? :shock:
Porque Lazy do Hibernate não Faz o seu trabalho?
6 Respostas
A questão é que c vc for verificar se ele ta populando, quando vc tentar verificar ele ja vai popular…
tente fazer assim:
passo 1… verifique se ele popula usando um GET …
passo 2… reinicie tudo… antes de dar o GET, de close na sessão, e depois de o GET, c ele não conseguir popular, é pq realmente esta sendo LAZY
ok vou fazer o teste. mas os meus passo são o seguintes:
1 : .list();
2 : alert(dwr.util.toDescriptveString(usuarios,2))//no dwr
me retorna um jSon totalmente gigante carregado
esta retornando isso pra mim no alert
[
Conversion Error. See console log.,
]
no saida do servidor…
failed to lazily initialize a collection of role: br.com.empresa.eleicaocipa.pojo.EleicaoCipa.eleitores, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.empresa.eleicaocipa.pojo.EleicaoCipa.eleitores, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:108)
at org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:272)
at org.directwebremoting.convert.CollectionConverter.convertOutbound(CollectionConverter.java:182)
at org.directwebremoting.dwrp.DefaultConverterManager.convertOutbound(DefaultConverterManager.java:192)
at org.directwebremoting.convert.BasicObjectConverter.convertOutbound(BasicObjectConverter.java:189)
at org.directwebremoting.dwrp.DefaultConverterManager.convertOutbound(DefaultConverterManager.java:192)
at org.directwebremoting.convert.CollectionConverter.convertOutbound(CollectionConverter.java:206)
at org.directwebremoting.dwrp.DefaultConverterManager.convertOutbound(DefaultConverterManager.java:192)
at org.directwebremoting.extend.ScriptBufferUtil.createOutput(ScriptBufferUtil.java:56)
at org.directwebremoting.dwrp.BaseCallMarshaller$CallScriptConduit.addScript(BaseCallMarshaller.java:510)
at org.directwebremoting.extend.EnginePrivate.remoteHandleCallback(EnginePrivate.java:56)
at org.directwebremoting.dwrp.BaseCallMarshaller.marshallOutbound(BaseCallMarshaller.java:328)
at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:53)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:120)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
at br.com.empresa.eleicaocipa.util.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:41)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
at com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
O erro indica que hibernate está tentando executar uma leitura sem ter uma seção aberta.
Verifique o controle de transações; no termino da transação o controle deve estar fechando a seção.
flws
ok eu arrumei la pq eu implementei o filter e tinha no generic dao os closesession eu tirei e funcionou pois agora quem tem que fechar a sessão é a classe de filter. Mas como mencionei no titulo do topico veja como esta trazendo o meu list de eleição que tem mapeamento de onetomany com eleitores
[
{
dataFinal:Thu Feb 19 2009 00:00:00 GMT-0300 (Hora oficial do Brasil),
dataInicial:Thu Feb 19 2009 00:00:00 GMT-0300 (Hora oficial do Brasil),
eleitores:[Object, Object, Object, Object, Object, Object, Object, ...], //não era para ele trazer estes objetos
horaFinal:Thu Jan 01 1970 18:30:00 GMT-0300 (Hora oficial do Brasil),
horaInicial:Thu Jan 01 1970 09:00:00 GMT-0300 (Hora oficial do Brasil),
idColigada:{cnpj:11.111.111..., idColigada:10, idUsuario:Object, nome:Treinamento, status:ATIVO, },
idEleicao:20,
idUsuario:{idUsuario:8, login:administrador, nomeUsuario:Administrador, senha:79f0f40eed..., status:ATIVO, },
nome:CIPA treinamento,
status:VOTACAO,
},
]
veja na classe eleição como esta
@RemoteProperty
@OneToMany(mappedBy="idEleicao")//por default onetomany é lazy mas coloquei tbm pra testar forçando o lazy e deu a mesma coisa
private List<Eleitor> eleitores;
@RemoteProperty
public List<Eleitor> getEleitores() {
return eleitores;
}
public void setEleitores(List<Eleitor> eleitores) {
this.eleitores = eleitores;
}
duvida :?: ! será que esta certo ele trazer
eleitores:[Object, Object, Object, Object, Object, Object, Object, …]
ou teria que ser
eleitores:[] ?
reparei que se eu colocar EAGER ao inves de trazer uma eleição com esses objetos ele repete varias vezes a mesma eleição talves do geito que esta esta sendo lazy!?