2012-03-19 4 views
4

У меня возникла проблема с параметром setParameterList api спящего режима.Как работает setParameterList в спящем режиме?

Я пытаюсь передать коллекцию в 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 Documentation for setParameterList, но я не в состоянии рассуждать из этого конкретного поведения.

+0

Вы могли бы хотеть, чтобы предоставить более подробную информацию о погрешности (например, StackTrace и т.д.), чтобы помочь нам понять вашу проблему. – Thomas

+0

Привет, Томас, я боюсь, что для этого случая не исключено исключение из-за спящего режима. –

ответ

7

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

Вместо этого вы можете использовать «обычный» запрос на спящий режим?

+0

Спасибо, Jon, проблема была решена, как только я переключился на использование HQL вместо собственного SQL. –

+1

Просто подумал, что я бы выбрал для меня именно такой запрос работает нормально, и я подозреваю, что реальная проблема с вашим запросом заключается в том, что вы смешиваете hibernate/sql. Таким образом, на самом деле все, что вам нужно было бы избавиться, это .addScalar («id», Hibernate.INTEGER) и превратить его в setParameter (id, theId), потому что фактическая часть списка прекрасна и отлично работает для меня на протяжении всего мой проект. –

1

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

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

Пожалуйста, добавьте немного больше объяснений. –

+0

Не записывайте «in (: empNames)», но «in: empNames», когда «empNames» является списком параметров для SQLQuery. –

Смежные вопросы