"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo devolver objetos personalizados de consultas Spring Data JPA GROUP BY?

¿Cómo devolver objetos personalizados de consultas Spring Data JPA GROUP BY?

Publicado el 2024-12-22
Navegar:153

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

Devolución de objetos personalizados en consultas Spring Data JPA GROUP BY

Introducción


Recuperar Los datos como objetos personalizados de las consultas Spring Data JPA GROUP BY mejoran la presentación de los datos y simplifican el procesamiento posterior. Esta guía explora cómo lograr esto y muestra soluciones para consultas JPQL y nativas.

Consultas JPQL


Las consultas JPQL dentro de la especificación JPA ofrecen nativas soporte para devolver objetos personalizados.

Paso 1: Crear un Bean personalizado


Defina un clase de bean para representar la estructura de salida deseada:

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

  // Constructor
}

Paso 2: Devolver instancias de Bean


Actualice el método del repositorio para devolver instancias del 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


Si bien las consultas nativas carecen de soporte directo para la nueva palabra clave, las interfaces Spring Data Projection proporcionan una solución alternativa:

Paso 1: Definir una interfaz de proyección


Cree una interfaz de proyección con propiedades correspondientes a lo deseado salida:

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

Paso 2: Devolver las propiedades proyectadas


Actualice el método del repositorio para devolver las propiedades proyectadas:

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();
}

Emplee la palabra clave SQL AS para asignar campos de resultados a propiedades de proyección sin problemas.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3