Lista de Objetos ou Classe

6 respostas Resolvido
javahibernate
G

Olá pessoal, estou com uma dúvida quanto ao resultado de um hql.
Estou fazendo queries complexas utilizando dados de várias classes em hql, tipo pegar um campo de uma classe e outro campo de outra classe ligadas com join fetch.
Quando eu faço esta select, o hql me retorna uma lista de objetos com duas posições, e quero exibir o resultado em um datatable (primefaces).
Porém é difícil trabalhar utilizando uma lista de objetos pois para pegar um valor eu tenho que utilizar a posição do campo do mesmo [0], [1]. Gostaria de saber o que é melhor, utilizar uma lista de objetos ou criar uma classe com dois atributos só para exibir os dados do hql no datatable.
Obrigado desde já.

6 Respostas

Lucas_Camara

Crie uma classe DTO, e nessa classe, crie um construtor com os campos que vc precisa retornar do select. E no HQL, na clausula select faça:

SELECT new SuaClasseDTO(tb1.colunaA, tb2.colunaB, tb3.colunaC)
FROM ....
G

Obrigado por responder, mas não era bem isso que eu queria, mas estou pesquisando aqui sobre isto que vc falou para ver a melhor forma de retornar estes dados do hql.

Lucas_Camara

Achei que atenderia, pois, utilizando um DTO dessa forma como postei, resolveu uma uma situação que tive bem parecida com a sua.

G

Tentei fazer esta classe DTO que você falou, criei os atributos e o construtor como você falou mas o hibernate fala que não encontrou a classe.
Uma dúvida: esta classe DTO eu tenho que mapear tbm no hibernate ou somente criar ela com os atributos que eu quero, criar este construtor e fazer o construtor para usar no HQL?..

Lucas_Camara
Solucao aceita

Ixa cara, foi falha minha. Para funcionar, você tem que colocar o caminho completo da classe:

SELECT new pacote.da.sua.classe.dto.SuaClasseDTO(tb1.colunaA, tb2.colunaB, tb3.colunaC)
FROM ....
G

Valeu cara, deu certo aqui. Muito Obrigado.

Criado 17 de agosto de 2016
Ultima resposta 18 de ago. de 2016
Respostas 6
Participantes 2