Не удалось сопоставить ответ на запрос с весенней загрузкой класса pojo - PullRequest
0 голосов
/ 09 мая 2019

Каждый ответ на запрос должен быть сопоставлен с классом poja.

Я написал собственный запрос

@Query(value="SELECT new QuestionJsonTotalAnswer(q.question) FROM mydb.question q", nativeQuery=true)
List<QuestionJsonTotalAnswer> showAnswersOfQuestions();

Преобразователь класса

public class QuestionJsonTotalAnswer {
    String question;
    // constructors, getters and setters
}

Но ошибка такова:

У вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного использования синтаксиса около '(q.question) ОТ mydb.question q' в строке 1

В приложении. Свойства

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

Примечание: работает нормально без класса pojo, когда я получаю ответ через List<Object> Но мне нужно пройти через класс pojo, чтобы избежать вложенных массивов.

Ответы [ 2 ]

3 голосов
/ 09 мая 2019

Вы должны использовать проекцию вот так.

@Query(value="SELECT q.question FROM mydb.question q", nativeQuery=true)
List<QuestionJsonTotalAnswer> showAnswersOfQuestions();

public interface QuestionJsonTotalAnswer {
    String getQuestion();
} 
1 голос
/ 09 мая 2019

Как говорит J4mes, вы должны проецировать на нативные запросы.

@Query(value="SELECT q.question FROM mydb.question q", nativeQuery=true)
List<QuestionJsonTotalAnswer> showAnswersOfQuestions();

public interface QuestionJsonTotalAnswer {
    String getQuestion();
} 

Вы можете использовать класс pojo, когда вы используете hql-запросы, как обычно, как вы задали в вопросе.Дополнительная информация - Если заголовок запроса

  1. возвращает question, использование String getQuestion(),
  2. возвращает неправильный заголовок, например, count(q.question), дают псевдонимы типа count(q.question) as countQuestion в запросе, затем спроецируйте его с Long getCountQuestion()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...