Параметр с этой позицией [1] не существовал после перемещения нативного запроса в NamedNativeQuery? - PullRequest
0 голосов
/ 18 февраля 2020

Почему я получаю следующую ошибку, когда я перемещаю собственный запрос JPA, который больше не работает, когда я перемещаю его в именованный?

java.lang.IllegalArgumentException: Parameter with that position [1] did not exist

Не рабочий запрос:

@NamedNativeQuery(
                name = Test.TEST,
                query = "SELECT * FROM test_table where id = ?",

Query q = entityManager.createNativeQuery(Test.TEST);
q.setParameter(1, 362L);
List<Object> result = q.getResultList();

Это работает:

Query q = entityManager.createNativeQuery("SELECT * FROM test_table where id = ?");
q.setParameter(1, 362L);
List<Object> result = q.getResultList();

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Потому что вы должны звонить:

Query q = entityManager.createNamedQuery(Test.TEST);

, а не

Query q = entityManager.createNativeQuery(Test.TEST);
0 голосов
/ 19 февраля 2020
  • Если вы хотите переместить ваш собственный запрос в именованный. -Тогда вам нужно будет сделать что-то вроде ниже.

  • Учитывая, что вы пример, у меня есть один класс по имени Test, и у меня есть один собственный запрос, который я хотел бы преобразовать в именованный. один пусть назовет его «testQuery»

  • , так что вы TestRepository похож на ниже, который содержит один метод с тем же именем именованного запроса, и далее мы можем вызвать его по его имени, чтобы он указывал ваш namedQuery (name-testQuery).

  • Test testQuery (@param ("id") int id)

  • Ниже указан ваш именованный род запрос, и вы можете поместить его над сущностью

  • @ NamedNativeQuery (name = Test.testQuery, query = "SELECT * FROM test_table где id =: id")

-Хоп, это будет полезно.

...