9. Получить ID сущностей через Spring Data JPA
Условие задачи:
В репозитории HeavyDataRepository необходимо реализовать метод, который возвращает список только идентификаторов сущностей HeavyData, не загружая объекты целиком.
Код:
public interface HeavyDataRepository
extends JpaRepository<HeavyData, Integer> {
List<Integer> getHeavyDataIds();
List<HeavyData> findAllByIsActive(Boolean isActive);
}
Спойлеры к решению
Подсказки
💡 Для выборки отдельных полей можно использовать
💡 В JPQL нужно обращаться к сущности и её полям, а не к таблице.
💡 Запрос
💡 Возвращаемый тип должен соответствовать типу поля
@Query.💡 В JPQL нужно обращаться к сущности и её полям, а не к таблице.
💡 Запрос
select h.id from HeavyData h загрузит только значения id.💡 Возвращаемый тип должен соответствовать типу поля
id.Решение
public interface HeavyDataRepository
extends JpaRepository<HeavyData, Integer> {
@Query("select h.id from HeavyData h")
List<Integer> getHeavyDataIds();
List<HeavyData> findAllByIsActive(Boolean isActive);
}
JPQL-запрос:
@Query("select h.id from HeavyData h")
выбирает только поле id, поэтому Hibernate не создаёт и не загружает целиком объекты HeavyData.
Если необходимо использовать нативный SQL:
@Query(
value = "select id from heavy_data",
nativeQuery = true
)
List<Integer> getHeavyDataIds();
Для JPQL используется имя сущности HeavyData, а для нативного SQL — реальное имя таблицы в базе данных.