Spring MVC, выбор специальных столбцов в собственном запросе SELECT - PullRequest
0 голосов
/ 02 февраля 2020

это мой родной запрос SELECT в репозитории

     @Modifying
 @Query(value = "SELECT * FROM tasks  WHERE title LIKE '%Java%' ORDER BY id DESC ", nativeQuery = true)
 List<Task> listAllTasks();

это работает нормально, но когда я использую пользовательское имя столбца вместо *, как это

     @Modifying
 @Query(value = "SELECT title FROM tasks  WHERE title LIKE '%Java%' ORDER BY id DESC ", nativeQuery = true)
 List<Task> listAllTasks();

У меня есть эта ошибка : org. postgresql .util.PSQLException: идентификатор имени столбца не найден в этом ResultSet.

любая справка?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020
  1. Выбор * из сущности -> возвращает список сущностей

Пример:

@Query(select * from tasks)

List<Task> findAllTasks();
Выбрать столбец из сущности -> возвращает список типов сущности.

Пример:

@Query(select t.title from tasks t)
List<String> findTitle_AllTasks();

заголовок имеет тип String

Выберите несколько столбцов в Entity -> возвращает Object [], содержащий данные

Пример:

@Query(select t.id, t.title from tasks t)
List<Object[]> findIdTitle_AllTasks();

Итак, вы извлекаете данные типа String - title и запрашиваете вернуть тип списка задач. Это вызывает проблему. Вы можете проверить документы гибернации в HQL и JPQL, чтобы понять это.

Плюс, вы делаете SELECT (операция DQL). @Modifying здесь зачаточно, так как используется для операций DML с использованием данных JPA - UPDATE / DELETE.

0 голосов
/ 02 февраля 2020

В наборе результатов нет «id», вы должны предоставить его.

Вам следует изменить способ объявления вашего SQL:

SELECT t.title, t.id FROM tasks t WHERE t.title LIKE '%Java%' ORDER BY t.id DESC 

Проверьте этот пример сортировки: Собственные запросы

...