quando eu tiver um select que envolva mais de uma entidade.
exemplo:
select * from Pessoa p, Funcionario f;
como faço para o resultado vir como entidades? Porque normalmente eu faço uma List<Object[]>.
e depois faço alguns cast, e pego cada atributo separadamente. Porém isso da muito trabalho, e quando são selects muito grandes, o codigo fica enorme.
Gostaria de saber qual solução tem para isso? Eu vi um pouco do @SqlResultQuery e o JPA NativeQuery, porém não sei se funciona para o meu caso e se funciona, gostaria que alguém me desse algum exemplo.
O problema é quando eu tenho mais de uma entidade em um select, como eu faço para traze-las ? já que no resultado do select, vem tudo misturado.
exemplo:
try{
manager.getTransaction().begin();
final Query query = manager
.createNativeQuery("SELECT * FROM financeiro.TBSIFN_NOTAFISCAL N," +
"financeiro.TBSIFN_FONTE_RECURSOS F WHERE N.cd_NotaFiscal = "+codNotaFiscal+" AND N.cd_FonteRecursos = F.cd_FonteRecursos ");
lista = query.getResultList();
Do jeito que você está fazendo, o resultado da Query é uma lista de array de objects (List<Object[]>). Aí, é só checar quais são os objetos em cada índice do array. Não sei se me fiz entender, se tiver dúvidas, avise.
O problema disso é que eu tenho que fazer um monte de cast, tenho que fazer vários arrays… e fica um código muito grande. !
Alguem tem outro tipo de solução ? @sqlResultList ? JPA NativeQuery ? … .coisa parecida ?
P
pbnf
A vantagem de se usar o hibernate é poder trabalhar com objetos e não com resultados de SQLs, use o mapeamento ja criado entre as classes pra recuperar o que vc precisa.
EuclidesFilizola
eu já faço isso ! Mas o problema é que quando o select possui mais de uma entidade, não é simples assim para mapear o resultado do select.
Entendeu. ?
danieldomingues86
Olá,
Cara… voce diz que está usando, mas só se for query nativa, pois o que o hibernate fornece voce não está.
Dê uma olhada na documentação para voce entender a diferença de fazer um createNativeQuery() e fazer um createQuery()
Esse link vai te ajudar a entender melhor :
Abraços.
EuclidesFilizola
Em outros métodos eu estou utilizado namedQuery ! entendeu ? Que eu só chamo o nome da NamedQuery e pronto. E me desculpem se eu me expressei mal, eu estou utilizando JPA. Nesse meu especifico é que eu estou usando NativeQuery, que é escrever o sql puro como se escreve no banco.
Só que como são várias entidades ao mesmo tempo, eu preciso de algo a mais ! Estou tentando utilizar o @SQLResultSetMapping. que é exatamente oq eu preciso. !