Hibernate не может выполнить запрос, который выполняется нормально с терминала - PullRequest
0 голосов
/ 28 октября 2019

У меня есть проект начальной загрузки (в linux) и простая база данных, состоящая из двух объектов - высказываний и тегов. У высказывания может быть несколько тегов, и каждый тег может использоваться для обозначения нескольких высказываний, так что это соотношение между многими. Таблица saying_tags используется для соединения высказываний и тегов с использованием их идентификаторов.

Когда я пытаюсь выбрать все высказывания, которые имеют точно заданные теги, используя этот запрос, и этот запрос что-то выбирает (результат не пустой), hibernate выдает исключение, говорящее Caused by: java.sql.SQLException: Column 'id' not found., но столбец id даже несуществуют в этом запросе. Когда я пытаюсь выполнить его из терминала или DBeaver, он работает нормально и возвращает мне то, что я ожидаю.

Я даже пытался жестко закодировать запрос с точными параметрами, чтобы убедиться, что режим гибернации ничего не меняет в запросе, и все равно не работает. И я буквально копирую запрос, когда hibernate регистрирует его в консоли, и он отлично работает в терминале.

Это запрос с жестко заданными значениями и метод внутри интерфейса, расширяющего JpaRepository<Saying, Long>, который его выполняет:

@Query(value="select saying_id from saying_tags group by saying_id having count(distinct case when tags_id in (33) then tags_id else 0 end) = 1 and min(case when tags_id in (33) then tags_id else 0 end) > 0", nativeQuery=true)
public List<Saying> getSayingsContainingExactlyGivenTags();

1 Ответ

1 голос
/ 29 октября 2019

Ваш запрос проецирует скалярное значение с именем saying_id, но вы возвращаете List из Saying сущностей. Ваша проекция должна состоять из всех свойств объекта Saying. Вам также может понадобиться @SqlResultSetMapping, чтобы убедиться, что вы правильно сопоставили свой набор результатов с вашей сущностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...