2014-01-06 70 views
0

我有下一個問題。帶「in」運算符和空列表的條件

我有未來的標準:

criteria.add(Restrictions.in("entity.otherEntity", getOtherEntitiesList())); 

如果我的otherEntitiesList是空的。休眠生成下一個查詢:

select count(*) as y0_ 
from OTHER_ENTITY this_ 
where this_.OTHER_ENTITY_ID in () 

和我從甲骨文得到例外。

我發現在Hibernate中下一行代碼:

String params = values.length > 0 ? StringHelper.repeat(
       singleValueParam + ", ", values.length - 1) 
       + singleValueParam : ""; 

這是不可能使用這種方法生成的標準。 我需要一種方式來生成空列表的Hibernate標準。如果列表爲空,我希望得到空的答案。

可能嗎?

感謝

+0

如果該列表是空的,不應該有一個結果,所以只需返回一個空列表而不進行查詢。 –

回答

2

你爲什麼不檢查列表的大小,然後再創建一個限制(如大小爲> 0):

if (getOtherEntitiesList() != null && getOtherEntitiesList().size() > 0) { 
    criteria.add(Restrictions.in("entity.otherEntity", getOtherEntitiesList())); 
} 
+0

或者只是在沒有數據庫命中的情況下返回零。 –

+0

我需要不返回任何內容的條件。 但是我不想寫類似criteria.add(Restrictions.ne(「Id」, - 1L))。add(Restrictions.eq(「Id」, - 1L))) – Anton

+0

在您的示例中,條件將返回所有行從表中。 – Anton