Как работает setParameterList в спящем режиме? - PullRequest
4 голосов
/ 19 марта 2012

У меня возникли проблемы с API-интерфейсом setParameterList hibernate.

Я пытаюсь передать коллекцию в SQLQuery и выполняю поиск в предложении «in». Записи существуют в БД и выполняют необработанный запрос, я могу получить их или, если я просто заменю их в том же Hibernate SQL, как emp.emp_name in ('Joe','John'), я могу получить желаемый набор результатов. Я не понимаю, почему Hibernate не сможет заменить коллекцию вместо указанного параметра. Вот код:

session.createSQLQuery("select emp_id as id from emp where emp.emp_name in (:empNames)")
       .addScalar("id",Hibernate.INTEGER)
       .setParameterList("empNames",new String[]{"Joe","John"})
       .list()

Я посмотрел на документацию Hibernate для setParameterList , но я не могу объяснить это конкретное поведение.

Ответы [ 3 ]

7 голосов
/ 19 марта 2012

I подозреваю проблема именно в , потому что вы используете createSQLQuery.Единственный параметр здесь нужно изменить на несколько параметров в реальном SQL, но с помощью «сырого» запроса вы говорите Hibernate не связываться с SQL.

Можете ли вы использовать «нормальный» Hibernateзапрос вместо этого?

1 голос
/ 02 июля 2015

Просто удалите скобки вокруг имени параметра:

session.createSQLQuery("select emp_id as id from emp where emp.emp_name in :empNames ")
   .addScalar("id",Hibernate.INTEGER)
   .setParameterList("empNames",new String[]{"Joe","John"})
   .list()
0 голосов
/ 19 февраля 2019

Я бы не предлагал использовать (N) списки параметров Hibernate. Планы запросов в кеше не используются, когда количество элементов в списке параметров отличается. Таким образом, это означает, что ваш запрос часто сложно анализируется и компилируется. Запросы выполняются медленнее, загрузка базы данных выше, а кэш планов заполнен планами, созданными для одного и того же запроса.

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