Pergunta

Ao ligar para um serviço remoto (por exemplo, sobre RMI) para carregar uma lista de entidades de um banco de dados usando o Hibernate, como você gerenciá-lo para inicializar todos os campos e referências as necessidades do cliente?

Exemplo: O cliente chama um método remoto para carregar todos os clientes. Com cada cliente o cliente quer a referência à lista do cliente de artigos comprados para ser inicializado.

Eu posso imaginar as seguintes soluções:

  1. Escrever um método remoto para cada consulta especial, que inicializa os campos obrigatórios (Por exemplo Hibernate.initialize ()) e regressa ao domínio objectos para o cliente.

  2. Como 1. mas criar DTOs

  3. Dividir a consulta-se em várias consultas, por exemplo, um para os clientes, um segundo para artigos dos clientes, e deixe o cliente gerenciar os resultados

  4. O método remoto tem um DetachedCriteria, que é criado pelo cliente e executado pelo servidor

  5. Desenvolver um costume "Preload-padrão", ou seja, uma maneira para que o cliente especifique explicitamente quais propriedades para pré-carga.

Foi útil?

Solução

Eu usei 1 no passado e funcionou bem.

Outras dicas

Eu acho que o número 5 é por isso que existe uma cláusula de "buscar" em HQL. Você poderia usar isso, ou é o problema mais complexo?

Eu estive em um cliente que padronizou seus projectos em # 5 e funcionou muito bem. O argumento final de uma chamada de serviço foi uma lista separada por vírgulas de todas as propriedades a serem carregados, por exemplo:

CustomerService.getCustomerById(id, "parent, address, address.city")

Eu acredito que eles usaram a cláusula buscar para isso. Eu implementei a mesma idéia de uma vez por jpa usando PropertyUtils para acionar o carregamento lento.

Este serviço remoto ... é outra parte da mesma aplicação? se assim for, não há nenhum problema compartilhar aulas e envio de casos e para trás (o mesmo vale para RMI, usando tocos).

Depois, há a opção de acessar um serviço web ou algo similar, onde os dois aplicativos que se comunicam share sem aulas, e isso torna as coisas ainda mais complicado. Estou prestes a enfrentar este problema no futuro próximo, e eu vou estar muito interessado em saber a resposta.

De qualquer forma, o meu voto é para DTOs. Eu acho que eles fornecem o melhor e mais fácil solução, quando aplicável, e ajudar a manter o código simples e de fácil manutenção.

Yuval = 8 -)

Se o seu serviço remoto só existe para fornecer o seu cliente com os dados, em seguida, desligar o carregamento lento em todas as entidades do Hibernate pode ajudar.

Pessoalmente, no entanto, acho que DTOs são o caminho certo para ir. Ao expressar sua interface remota em termos de DTOs tiver certeza de que você tem tudo que você precisa, e nada que você não esperava.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top