2015-04-30 7 views
0

У меня есть родной запрос SQL в Hibernate:Hibernate. Аналог запрос # setParameterList

SELECT * FROM my_table where id IN (:ids) 

Я хочу, чтобы заменить :ids именованный параметр с List<Long>.

Query query = query.createSQLQuery(...) 
query.setParameter("ids", ids, ???); // WHAT Hibernate type to use here? 

Какой я должен использовать в качестве 3-го параметра setParameter метода?

Например, для Boolean Я использовал этот и она работала (но не работать без указания типа):

query.setParameter("active", active, new NumericBooleanType()); 

Обратите внимание, я не могу использовать Query#setParameterList (потому что мой список может быть null)

EDIT:

На самом деле мой запрос выглядит так:

SELECT * FROM my_table where :ids IS NULL OR id IN (:ids)

Это помогает мне поддерживать необязательные параметры без необходимости динамического создания SQL (что, по-моему, является запахом кода). И если мой List пуст, я заменяю его null, потому что SQL не разрешает пустое предложение IN (если оно null, то раздел OR id IN (:ids) вообще не будет выполнен в моем случае).

Поэтому я использую setParameter только потому, что она позволяет использовать null с, но setParameterList бросает исключение, когда коллекция null.

Как я могу заставить setParameter работать так же, как setParameterList, но не выбрасывая исключение?

+1

Насколько я знаю, вы не можете, setParameter для одного значения, setParameterList для кратных, и вы пытаетесь сделать оба одновременно. –

ответ

1

Поскольку вы не можете использовать setParameterList, вам необходимо динамически создать SQL с n параметрами подстановки и вызвать setParameter() для каждого.

SQL вообще не допускает пустой оператор IN, поэтому вам придется обрабатывать этот случай отдельно.

+0

, пожалуйста, посмотрите мое обновление – MyTitle

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