[RESOLVIDO] Problema ao carregar dados do Hibernate para o Flex

14 respostas
EugenioMonteiro

Desenvolvi um sistema utilizando Hibernate + Blazeds + Flex, porém estou tendo um problema ao carregar coleções de dados para o Flex. O problema é o seguinte:

Tenho 3 classes: Usuario, Adminstrador e Servico.

A relação de BD é a seguinte:

Usuario 1------* Servico;

Administrador 1--------* Servico;

Desse modo quando eu chamo get(usuario) numa sessão do hibernate, ele carrega uma coleção com todos os Serviços solicitados pelo Usuario, cada Serviço, por sua vez, está associado a um Administrador. Em java puro eu consigo ler todos esses dados, porém ao passar o Usuario carregado para o Flex, ele só consegue ler os dados de cada Serviço (descrição, data, etc), mas os dados relativos ao Administrador associado a cada serviço são null.

Já está tudo funcionando corretamente, classes espelho no Flex e tudo mais. Existe alguma configuração a ser feita para carregar corretamente os dados do Adminstrador de cada serviço?

14 Respostas

VanHelsing

e ai Eugenio…

To com a mesma dificuldade… Algum progresso?

Abs

EugenioMonteiro

Ainda não consegui nenhuma explicação. Talvez eu não esteja sabendo como procurar.
Fica a pergunta: será que alguém pode nos ajudar?

pintofree

Ola amigo, acredito que seu problema seja nos mapeamentos das classes do hibernate, e nao no flex, tente simular a busca apenas em java, para vc tirar a duvida.

EugenioMonteiro

O pior é que isso eu já fiz. Quando mostro dados apenas em Java, funciona corretamente.

VanHelsing

O que eu percebo é que o Java apenas me traz uma colecao de objetos (no meu caso PedidosVO).
Os Itens dos Pedidos (ItensPedidosVO) não vem junto com a colecao.

Aí que tá pegando. To lendo algo a respeito do LAZY LOADING.

EugenioMonteiro

Alguém conseguiu algum progresso? Nenhum objeto complexo criado consegue ser lido de java para Flex.

Desenvolvi um sistema utilizando Hibernate + Blazeds + Flex, porém estou tendo um problema ao carregar coleções de dados para o Flex. O problema é o seguinte:

Tenho 3 classes: Usuario, Adminstrador e Servico.

A relação de BD é a seguinte:

Usuario 1------* Servico;

Administrador 1--------* Servico;

Desse modo quando eu chamo get(usuario) numa sessão do hibernate, ele carrega uma coleção com todos os Serviços solicitados pelo Usuario, cada Serviço, por sua vez, está associado a um Administrador. Em java puro eu consigo ler todos esses dados, porém ao passar o Usuario carregado para o Flex, ele só consegue ler os dados de cada Serviço (descrição, data, etc), mas os dados relativos ao Administrador associado a cada serviço são null.

Já está tudo funcionando corretamente, classes espelho no Flex e tudo mais. Existe alguma configuração a ser feita para carregar corretamente os dados do Adminstrador de cada serviço?

Alguém aí já fez o mesmo teste com JDBC e aconteceu este problema?

EugenioMonteiro

Consegui resolver :D. Você tinha razão VanHelsing, o que estava pegando era o LAZY LOADING.
Depois de muito procurar descobri que o BlazeDS não tem suporte ao LAZY LOADING (o LCDS, framework pago tem), então para resolver, desabilitei o lazy loading (lazy=“false”) nos meus relacionamentos.

VanHelsing

Legal Eugenio… Tbm consegui aqui…

Vlw

VanHelsing

Aproveitando o assunto…

Tenho duas classes no Java, uma classe ItensVO aonde eu tenho:

@ManyToOne
	@JoinColumn(name="movimento")
	private MovimentosVO movimento;

E na Classe MovimentosVO:

@OneToMany(mappedBy="movimento")
	private List<ItensVO> listaItens;

E no Flex minha Classe MovimentosVO:

public var lista:ItensVO;

Como vc faz pra pegar essa lista de itens e jogar num Datagrid?
Tentei fazer isso convertendo pra um ArrayCollection mas nada.

Vlw

viniciuspadua

estou com o mesmo problema, entretanto não posso desabilitar o lazy, pois se fizer isso o desempenho vai cair muito!

H

Olá,

Eu tenho uma solução para esse problema de lazy é só utilizar esse componente http://sourceforge.net/projects/setlazynull/
Ele irá fazer isso automatico setando null aonde estiver com lazy nas suas classes.

E funciona que é uma beleza.

Qualquer duvida me envie um email:
[email removido]

UpTheIrons

Olá Humberto,

Poderia postar um exemplo de sua implementação?

Grato,

H

O SetLazyNull ajuda a corrigir o erro do lazy loading que acontece com o BlazeDS ao fazer a comunicação entre o Java com o Flex, quando uma classe que é uma entidade do banco que contém uma coleção de objetos (um para muitos), essa coleção por padrão vem como lazy, quando vc manda o java fazer uma consulta ao banco através do hibernate ele carrega os dados do banco nessa classe, então o BlazeDS pega essa informação e devolve para o Flex, mas no momento de devolver o BlazeDS faz uma varredura nessa classe, nesse momento quando ele passa no atributo que é uma coleção faz disparar o LazyInitialization fazendo o blazeDS pensar que isso foi um erro e devolvendo para o flex um erro sem trazer os dados consultados, então o papel do SetLazyNull é pegar onde tiver uma coleção do tipo lazy e setar null, mas quando ele estiver carregado essa coleção ele não seta Null. Para utilizar o SetlazyNull no método que vai fazer a busca do conteúdo é só adicionar a anotação @LazyNull em cima do método que faz a busca dos dados ex:

@LazyNull public Estado buscarEstados(Integer id){....}
Fazendo assim ele resolve o problema do lazy.

UpTheIrons

Então, eu testei aqui, n ajudou muito (uso EclipseLink), pelo menos
o problema de performance continua, talvez eu passe a usar DTOs tb, em alguns casos.

Criado 11 de junho de 2010
Ultima resposta 5 de nov. de 2010
Respostas 14
Participantes 6