[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:
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?
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:
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:
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
humbertopatrick
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.
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.