«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как вернуть пользовательские объекты из запросов Spring Data JPA GROUP BY?

Как вернуть пользовательские объекты из запросов Spring Data JPA GROUP BY?

Опубликовано 22 декабря 2024 г.
Просматривать:748

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

Возврат пользовательского объекта в запросах Spring Data JPA GROUP BY

Введение


Извлечение данные в виде пользовательских объектов из запросов Spring Data JPA GROUP BY улучшают представление данных и упрощают дальнейшую обработку. В этом руководстве рассказывается, как этого добиться, и демонстрируются решения как для JPQL, так и для собственных запросов.

Запросы JPQL


Запросы JPQL в спецификации JPA предлагают нативные запросы поддержка возврата пользовательских объектов.

Шаг 1. Создайте пользовательский Компонент


Определите простой класс компонента для представления желаемой структуры вывода:

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

  // Constructor
}

Шаг 2. Возврат экземпляров компонента


Обновите метод репозитория, чтобы он возвращал экземпляры пользовательского компонента:

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

Нативные запросы


Хотя нативные запросы не имеют прямой поддержки нового ключевого слова, интерфейсы Spring Data Projection предоставляют альтернативное решение:

Шаг 1. Определите интерфейс проекции


Создайте интерфейс проекции со свойствами, соответствующими желаемому вывод:

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

Шаг 2. Возврат прогнозируемых свойств


Обновите метод репозитория, чтобы он возвращал прогнозируемые свойства:

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

Используйте ключевое слово SQL AS для беспрепятственного сопоставления полей результатов со свойствами проекции.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3