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á.
Lista de Objetos ou Classe
6 Respostas
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 ....
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.
Achei que atenderia, pois, utilizando um DTO dessa forma como postei, resolveu uma uma situação que tive bem parecida com a sua.
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?..
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 ....
Valeu cara, deu certo aqui. Muito Obrigado.