Pergunta

Estou desenvolvendo uma aplicação cliente-servidor com o Hibernate como camada de persistência e Jersey Rest for Network Communication.

Dado um usuário com funções:

  1. Quando quero exibir todos os usuários do cliente, não quero que os papéis sejam carregados por Hibernate e não quero que eles sejam enviados pela rede
  2. Quando quero modificar as funções do usuário, quero que eles sejam carregados e sejam transferidos

Estou usando um padrão de pré -carregamento (http://bwinterberg.blogspot.com/2009/09/hibernate-preload-pattern.html), para determinar quais propriedades devem ser carregadas por hibernação. Isso funciona bem.

No caso 1, nenhum papel é carregado pelo hibernado, assim como o pretendido. Mas assim que Jersey cria o XML a ser enviado ao cliente, ele lê as funções do usuário, o que, por sua vez, permite hibernar carregar as funções (e todas as outras propriedades). No final, o Hibernate sempre carrega a árvore completa dos conjuntos de dados pertencentes a um usuário.

Pensei em separar o usuário fechando a sessão antes de passar o usuário para Jersey, para que o Hibernate não possa carregar as funções, mas isso não parece ter nenhum efeito.

Alguma ideia?

Foi útil?

Solução

  • Faça um clone raso da sua entidade e defina uma coleção vazia, antes de dar -a para serializar

  • Faça um proxy personalizado da coleção proxiada e delegue o carregamento apenas em algumas circunstâncias (a primeira USECASE) e retorne uma coleção vazia em outros

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