Pessoal,
Estou com dificuldade para realizar uma consulta no hibernate.
Minha situação é a seguinte, tenho uma classe abstrata “Documento”.
E tenho duas classes concretas que herdam dessa classe, a “DocumentoTipoA” e “DocumentoTipoB”.
Na base, tenho duas tabelas, uma para “DocumentoTipoA” e outra para “DocumentoTipoB”.
O mapeamento utilizado para essa herança foi “@Inheritance(strategy =
InheritanceType.TABLE_PER_CLASS)”, ou seja, a aplicação insere os documentos em cada tabela a depender da instância do objeto “Documento” e os ids não se repetem entre as tabelas.
Outra informação importante, a classe “Documento” também tem um relacionamento com uma classe chamada “Etiqueta”, a qual tem um atributo importante para a função que irei implementar.
Apenas para contextualizar, quando faço uma consulta da forma abaixo, o hibernate faz a consulta nas duas tabelas e já me retorna os objetos das instâncias “DocumentoTipoA” e “DocumentoTipoB” corretamente.
TypedQuery<Documento> query = this.em
.createQuery("from Documento doc", Documento.class);
List<Documento> documentos = query.getResultList();
O problema é que uma consulta como essa está descartada, pois são retornados muitos objetos e a memória do servidor vai pro espaço.
Para poupar memória, quero utilizar apenas alguns campos do objeto documento.
Resumindo, preciso do Documento com os seguintes atributos preenchidos “Documento.id” e “Documento.etiqueta.localizador”
Se os dois atributos fossem da classe “Documento” seria tarefa fácil.
Minha dificuldade está em retornar esse objeto “Etiqueta” apenas com o atributo “localizador” preenchido no objeto “Documento”.
Importante: Preciso que seja retornado na consulta o objeto do tipo “Documento”,
pois preciso saber qual é a sua instância, se é “DocumentoTipoA” e
"DocumentoTipoB". Se deixasse para verificar o tipo depois perderia performance, pois teria que fazer uma verificação documento por documento.
Desde já agradeço.