Qual é a melhor maneira de carregar um Hibernate gráfico de objeto antes de usá-lo em uma INTERFACE de usuário?

StackOverflow https://stackoverflow.com/questions/79843

  •  09-06-2019
  •  | 
  •  

Pergunta

A situação é esta:

  • Você tem uma Hibernação de contexto com um gráfico de objeto que tenha algum preguiçoso carregamento definido.
  • Você deseja usar o Hibernate objetos na INTERFACE do usuário é, sem ter de copiar os dados em algum lugar.
  • Há INTERFACE de usuário diferente contextos que exigem diferentes quantidades de dados.
  • Os dados são muito grande para apenas carrega toda a gráfico de cada vez.

Qual é o melhor meio para carregar todos os objetos apropriados no objeto gráfico em um configuráveis de forma que eles possam ser acessados sem ter que voltar para o banco de dados para carregar mais dados?

Qualquer ajuda.

Foi útil?

Solução

Vamos dizer que você tem o Cliente e em um ponto que você tem algo com a suas Ordens, e talvez ele tenha um Bônus para suas Ordens.

Em seguida, gostaria de definir um Repositório com uma interface fluente, que me permitirá dizer algo como :

new ClientRepo().LoadClientBy(id)
                .WithOrders()
                .WithBonus()
                .OrderByName();

E aí você tem o cliente, com tudo o que você precisa.É, de preferência, que você sabe com antecedência o que você vai precisar para a operação atual.Desta forma, você pode evitar o indesejado viagens para o banco de dados.(novos devs em sua equipe costuma fazer isso - chamar uma propriedade e não estar ciente do fato de que ele é realmente uma chamada para o DB)

Outras dicas

Se é uma webapp e você está usando Spring, em seguida, OpenSessionInViewFilter poderia ser a solução para os seus problemas.

Uma abordagem que usamos em nossos projetos é criar um serviço para cada modo de exibição que você tem.Em seguida, o modo de exibição de busca do sub-grafo que você precisa para este modo de exibição específico, sempre tentando reduzir o número de sqls enviar para o banco de dados.Portanto, estamos usando um monte de associações para obter o n:1 de objetos associados.

Se você estiver usando uma 2 da camada de aplicação do ambiente de trabalho diretamente ligado ao DB você pode apenas deixar objectos ligados e carga de dados adicionais a qualquer hora automaticamente.Caso contrário, você terá que recolocá-la para a sessão e inicializar a associação que você precisa com Hibernate.initialize(Object entity, String propertyName)

(Sem memória, talvez não 100% correto)

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