Проблема с позиционными параметрами в собственном запросе JPA - PullRequest
6 голосов
/ 10 ноября 2010

Я пытаюсь сделать:

String sql = "SELECT email FROM users WHERE (type like 'B') AND (username like '?1')";
List results = em.createNativeQuery(sql).setParameter(1, username).getResultList();

Но я получаю исключение IllegalArgumentException, которое говорит мне, что параметр выходит за границы.Что я делаю не так?

Ответы [ 2 ]

8 голосов
/ 10 ноября 2010

Не должно быть кавычек вокруг параметров.Попробуйте вместо этого:

String sql = "SELECT email FROM users WHERE (type like 'B') AND (username like ?1)";

Возможно, вы захотите еще раз проверить, действительно ли вы имеете в виду type like 'B', так как это, вероятно, не соответствует вашим ожиданиям.

2 голосов
/ 10 ноября 2010

а) Почему вы используете собственный SQL для простого запроса, подобного этому?Используйте JPQL.
б) Зачем использовать лайк, если вы не используете подстановочные знаки?Используйте = вместо.

String jpql =
  "SELECT u.email FROM users u WHERE (u.type = 'B') AND (u.username = '?1')";

List results = 
    em.createQuery(jpql)
      .setParameter(1, username)
      .getResultList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...