У меня есть родной запрос 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
, но не выбрасывая исключение?
Насколько я знаю, вы не можете, setParameter для одного значения, setParameterList для кратных, и вы пытаетесь сделать оба одновременно. –