我有原生SQL查詢中休眠:休眠。查詢#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?
我應該使用什麼類型作爲setParameter
方法的3-rd參數?
例如布爾我用這一個和它的工作(但沒有指定類型沒有工作):
query.setParameter("active", active, new NumericBooleanType());
請注意,我不能使用Query#setParameterList
(因爲我的名單可以null
)
編輯:
其實我的查詢看起來更像是這樣的:
SELECT * FROM my_table where :ids IS NULL OR id IN (:ids)
它幫助我支持可選參數,而不需要動態創建SQL(這是我認爲的代碼味道)。如果我的List
是空的,我將它替換爲null
,因爲SQL不允許有空的IN子句(如果它null
,則OR id IN (:ids)
部分在我的情況下根本不會執行)。
所以我用setParameter
不僅是因爲它允許使用null
S,但setParameterList
拋出異常時收集null
。
我怎麼會導致setParameter
就像setParameterList
一樣工作,但沒有拋出異常?
就我所知,你不能,setParameter是針對單個值的,setParameterList針對的是倍數,並且你正試圖同時執行這兩個操作。 –