[Logo] Neo Framework Forum
  [Search] Busca   [Recent Topics] Tópicos Recentes   [Members]  Lista de Usuários   [Groups] De volta para a página principal 
[Register] Registrar / 
[Login] Entrar 
PROBLEMA LAZY LOAD  XML
Índice dos Fóruns -> Dúvidas
Autor Mensagem
fmpizani
Equipe

Membro desde: 03/09/2007 09:09:34
Mensagens: 13
Offline

Bom dia galera,

Estou começando a trabalhar agora com o neo e estou tendo um problema na hora de carregar os relacionamentos da minha entidade. Ao tentar acessar os relacionamentos da minha entidade dentro do service está ocorrendo erro no carregamento. Tentei definir uma transação para o meu método do service mas não estou conseguindo.

Será que alguém consegue me ajudar??

Valeu!!!
[Email] [Yahoo!]
pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

Seja bem vindo ao fórum e espero que encontre resposta para todas as dúvidas que tiver.


Voltando a sua pergunta:
Teria como postar o fonte e a excessão?

Posta a action, DAO e service.

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
fmpizani
Equipe

Membro desde: 03/09/2007 09:09:34
Mensagens: 13
Offline

Obrigado Pedro,

O cenário é o seguinte:

Eu tenho uma entidade Empresa que possui uma lista de profissionais, mapeada da seguinte forma em Profissional:

Code:
	
        @ManyToOne
 	@JoinColumn(name = "AD6NUMEM", nullable = false)
 	public Empresa getEmpresa() {
 		return empresa;
 	}
 


e em Empresa:

Code:
 	@OneToMany(mappedBy = "empresa")
 	public List<Profissional> getProfissionais() {
 		return profissionais;
 	}
 


Eu tenho um service chamado EmpresaService e reimplementei o método delete da seguinte forma:

Code:
 	public void delete(Empresa empresa) {
 
 		empresa = this.load(empresa);
 
 		if (empresa.getProfissionais() != null
 				&& !empresa.getProfissionais().isEmpty()) {
 
 			throw new NeoException("A empresa não pode ser " 
                                         + "excluída "
 					+ "pois possui profissionais cadastrados.");
 			
 		} 
 
                 super.delete(empresa);
 	}
 


Quando o método getProfissionais() é executado a seguinte exceção é disparada:

Code:
 
 13:06:13,105 ERROR [LazyInitializationException] failed to lazily initialize a collection of role: br.com.geoexplore.geoenterprise.adm.bean.Empresa.profissionais, no session or session was closed
 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.geoexplore.geoenterprise.adm.bean.Empresa.profissionais, no session or session was closed
 	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
 	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
 	at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:97)
 	at org.hibernate.collection.PersistentBag.isEmpty(PersistentBag.java:229)
 	at br.com.geoexplore.geoenterprise.adm.service.EmpresaService.delete(EmpresaService.java:44)
 	at br.com.geoexplore.geoenterprise.adm.service.EmpresaService.delete(EmpresaService.java:1)
 	at br.com.linkcom.neo.controller.crud.CrudController.excluir(CrudController.java:315)
 	at br.com.geoexplore.geoenterprise.adm.controller.GeoController.excluir(GeoController.java:18)
 	at br.com.linkcom.neo.controller.crud.CrudController.doExcluir(CrudController.java:303)
 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 	at java.lang.reflect.Method.invoke(Method.java:585)
 	at br.com.linkcom.neo.controller.MultiActionController.invokeNamedMethod(MultiActionController.java:504)
 	at br.com.linkcom.neo.controller.MultiActionController.handleRequestInternal(MultiActionController.java:367)
 	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:139)
 	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
 	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:717)
 	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:658)
 	at br.com.linkcom.neo.controller.DispatcherServlet.doService(DispatcherServlet.java:59)
 	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:392)
 
 


Eu fiz o debug do código e verifiquei que se eu tentar executar o método getter dentro do DAO, a lista é carregada normalmente. Então eu imagino que deve ser algo ligado ao contexto da transação, mas não consegui resolver.

Valeu pela ajuda!!

[Email] [Yahoo!]
pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

Cara.. seguinte.. se você montar as fk's o neo já faz este tratamento automaticamente. Não precisa disso.

agora.. quando a este problema que está dando é porque você não carregou a lista..

ai você deve procede mais ou menos assim:

Code:
 Public Bean loadCompleto(Bean bean){
        return query()
                  .leftOuterJoinfetch("bean.lista lista")
                  .entity(bean)
                  .unique()
 }
 
 


entao.. você terá que substituir o load do método delete por este que você vai criar, que irá carregar a lista..

entendeu?

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
fmpizani
Equipe

Membro desde: 03/09/2007 09:09:34
Mensagens: 13
Offline

Entendi sim...

Muito obrigado!!
[Email] [Yahoo!]
pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

Por nada! qualquer coisa posta ai!

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
robmsjr
MultiAction

Membro desde: 26/06/2007 19:30:49
Mensagens: 88
Offline

Eu estou com uma dificuldade tambem envolvendo o lazyload, no caso tenho uma tabela venda q tem uma lista de itensvenda e cada item venda tem um estoque que tem um produto.

No caso represento minha venda entrada com um t:detalhe e na hora de selecionar o estoque do itemvenda estou tendo esse erro porque meu description property é montado com info de produto.

Com essa situação fiquei sem saber onde carregar o produto... Tentei carregar no updateEntradaQuery do VendaDAO mas não consegui montar uma query que pegue produto.

Se alguem puder me ajudar agradeço.

abraços
pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

Teria como postar o jsp de entrada e o metódo updateEntradaQuery?

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
robmsjr
MultiAction

Membro desde: 26/06/2007 19:30:49
Mensagens: 88
Offline

Teria, mas não vai adiantar.

no meu updateQuery eu só coloquei fetchCollection("itens")
que carrega a lista de ItemVenda.

E no meu jsp funciona tudo ok, menos quando edita que o campo da tabela venda.itemVenda.estoque.produto.nome da o lazy collection. O erro ocorre corretamente, eu só não sei como fazer pra carregar o produto no meu entrada query.

Se mesmo assim precisar dos arquivos eu posto aqui.

abraços e valeu pela ajuda.
pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

Cara.. ao invés de usar a fetchCollection usa .leftOuterJoinFetch("bean.lista lista")

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
 
Índice dos Fóruns -> Dúvidas
Ir para:   
Powered by JForum 2.1.7 © JForum Team