Olá, utilizo JPA 2.2 com Hibernate e tenho todas as minhas tabelas mapeadas em Classes de Entidades com anotações JPA e consigo tranquilamente realizar consultas com JPQL conforme código abaixo:
TypedQuery<TabelaA> query = entityManager.createQuery(jpql, TabelaA.class);
Agora tenho uma duvida na seguinte situação:
Preciso realizar uma consulta em diversas tabelas cujo o retorno não representa nenhuma tabela real no meu banco de dados, ou seja, não possuo uma classe de entidade para realizar a devida query JPQL.
Então pensei em usar uma Query Nativa conforme código abaixo:
String sql = "select a.c1, a.c2, b.c2, c.c1, c.c2, d.c1 ... from tabela_a a join tabela_b b ...<código omitido, pois é muito grande> ....";
Query query = entityManager.createNativeQuery(sql);
List resultQuery = query.getResultList();
O código executa perfeitamente, porém me retorna uma lista com um array de objetos List<Object[]>
.
Sei que posso pegar as linhas e colunas com o for
, mas gostaria de saber como criar uma classe que não é uma entidade, pensei em uma classe ConsultaDTO
com todos os campos de retorno da consulta, e então fazer com que o retorno .getResultList()
seja um List<ClasseDTO>
e não um List<Object[]>
.
Mas não sei como fazer, aguem poderia me ajudar com alguns exemplos, até mesmo outra solução para este problema, pois o que eu preciso é retornar os registros de uma consulta e repassar para o Controller realizar as devidas manipulações e então o resultado destas manipulações que serão salvas no DB normalmente em uma tabela real.