2011-02-02 2 views
2

Использование Java, Hibernate.Hibernate createNativeQuery с использованием IN-кода

У меня есть запрос

String pixIds = "1,2,3"; 
String query = "SELECT * FROM comment WHERE PIX_ID IN (:pixIds)"; 
q.setParameter("pixIds", pixIds); 
List<Object[]> results = q.getResultList(); 

Я не в состоянии связать этот параметр, чтобы pixIds используя код, приведенный выше. Каков правильный способ сделать это?

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

ответ

5

Следующий метод работает
общественного запроса setParameterList (имя Строка, Коллекция Vals) бросает HibernateException

+2

Нет такого метода для собственных запросов. –

4

Hibernate не поддерживает сбор привязки до IN (...) в SQL-запросах.

Вы должны работать так же, как с обычной JDBC: данный набор, динамически генерировать запрос с соответствующим количеством ? с в IN пункте, а затем связать элементы этой коллекции ? с.

+0

Жаль, что я пропустил, добавив, что pixId является строка, а не коллекция. Отредактировано мое оригинальное сообщение, чтобы включить изменение. – smahesh

+0

@sammichy: Точно одно и то же: вам нужно создать три '' '' s и связывать '1',' 2' и '3' с отдельными вызовами' setParameter() '. – axtavt

+0

Я уже пробовал это, и это сработало. Но скомпилированный SQL не используется повторно? Этот запрос используется много, поэтому я хотел посмотреть, есть ли что-то более оптимальное. – smahesh

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