1
resposta

Model para querys customizadas

Quando preciso fazer uma consulta com muitos relacionamentos e pegando poucas informações nas tabelas relacionadas, não vale a pena eu fazer o mapeamento de todas as tabelas dessa consulta, então vou usar o @Query para criar uma consulta nativa.

Dessa forma, como faço para identificar (anotar) a classe model do retorno dessa consulta?

Não posso usar @Entity pq não é uma tabela única.

1 resposta

Olá Caio, tudo bem?

Você pode usar a anotação @SqlResultSetMapping para identificar o model de retorno de uma consulta nativa. Essa anotação permite mapear o resultado de uma consulta para uma classe model personalizada. Por exemplo:

@SqlResultSetMapping(
    name = "CustomModelResult",
    classes = {
        @ConstructorResult(
            targetClass = CustomModel.class,
            columns = {
                @ColumnResult(name = "coluna1", type = String.class),
                @ColumnResult(name = "coluna2", type = Integer.class),
                ...
            }
        )
    }
)
@NamedNativeQuery(
    name = "findCustomData",
    query = "SUA_CONSULTA_SQL",
    resultSetMapping = "CustomModelResult"
)
List<CustomModel> result = entityManager.createNamedQuery("findCustomData", CustomModel.class).getResultList();