2015-04-30 66 views
0

我有原生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一樣工作,但沒有拋出異常?

+1

就我所知,你不能,setParameter是針對單個值的,setParameterList針對的是倍數,並且你正試圖同時執行這兩個操作。 –

回答

1

由於您不能使用setParameterList,因此您必須動態創建帶有n個替代參數的SQL,並分別調用setParameter()。

SQL通常不允許空的IN子句,因此您需要分別處理該情況。

+0

請看我的更新 – MyTitle