我有兩個排在MySQL這樣如何使用Hibernate eqOrIsNull()
+---------+---------+
| foo | bar |
+---------+---------+
| | NULL |
| | |
+---------+---------+
當空是空字符串""
。
現在我想要得到他們兩個。我在兩列上都使用Criteria
和Restrictions.eqOrIsNull()
,但它總是隻返回一行。
的代碼是這樣的
criteria.add(Restrictions.eqOrIsNull("foo", ""));
.add(Restrictions.eqOrIsNull("bar", ""));
當我只在foo
添加條件,它返回兩行。但是對於bar
,它只返回空的第二個。
javadoc說,Apply an "equal" constraint to the named property. If the value is null, instead apply "is null".
所以我得到這個錯誤,或者應該以其他方式使用?
UPDATE:
對不起,我這麼粗心。該文件明確指出。此方法根據傳遞給它的value
工作,而不是存儲在DB中的命名屬性的實際值。在Github
的源代碼:
public static Criterion eqOrIsNull(String propertyName, Object value) {
return value == null
? isNull(propertyName)
: eq(propertyName, value);
}
在我的情況
所以,eqOrIsNull
回報eq("")
。我應該使用eq
和isNull
的分離,如Gregory answered。
對於這類問題,您應該啓用調試日誌記錄。它會讓hibernate打印正在執行的sql。 – adam0404
就像'select foo,bar from table where foo =?和bar =?' – hsluo