"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como retornar objetos personalizados de consultas Spring Data JPA GROUP BY?

Como retornar objetos personalizados de consultas Spring Data JPA GROUP BY?

Publicado em 2024-12-22
Navegar:177

How to Return Custom Objects from Spring Data JPA GROUP BY Queries?

Retorno de objeto personalizado em consultas Spring Data JPA GROUP BY

Introdução


Recuperação dados como objetos personalizados de consultas Spring Data JPA GROUP BY aprimoram a apresentação dos dados e simplificam o processamento adicional. Este guia explora como fazer isso, apresentando soluções para consultas JPQL e nativas.

Consultas JPQL


Consultas JPQL dentro da especificação JPA oferecem consultas nativas suporte para retornar objetos personalizados.

Etapa 1: Crie um Bean personalizado


Defina um classe de bean simples para representar a estrutura de saída desejada:

public class SurveyAnswerStatistics {
  private String answer;
  private Long cnt;

  // Constructor
}

Etapa 2: Retornar instâncias do bean


Atualize o método do repositório para retornar instâncias do bean personalizado:

public interface SurveyRepository extends CrudRepository {
    @Query("SELECT new com.path.to.SurveyAnswerStatistics(v.answer, COUNT(v)) FROM Survey v GROUP BY v.answer")
    List findSurveyCount();
}

Consultas nativas


Embora as consultas nativas não tenham suporte direto para a nova palavra-chave, as interfaces do Spring Data Projection fornecem uma solução alternativa:

Etapa 1: Definir uma interface de projeção


Crie uma interface de projeção com propriedades correspondentes ao desejado saída:

public interface SurveyAnswerStatistics {
  String getAnswer();
  int getCnt();
}

Etapa 2: Retornar propriedades projetadas


Atualize o método do repositório para retornar propriedades projetadas:

public interface SurveyRepository extends CrudRepository {
    @Query(nativeQuery = true, value =
            "SELECT v.answer AS answer, COUNT(v) AS cnt FROM Survey v GROUP BY v.answer")
    List findSurveyCount();
}

Use a palavra-chave SQL AS para mapear campos de resultados para propriedades de projeção perfeitamente.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3