私は空が空の文字列""
あるこの休止eqOrIsNullを使用する方法()
+---------+---------+
| foo | bar |
+---------+---------+
| | NULL |
| | |
+---------+---------+
のようにMySQLの中で2つの行を持っています。
今私はそれらの両方を取得したいです。両方の列でCriteria
とRestrictions.eqOrIsNull()
を使用しますが、常に1つの行しか返しません。
コードは次のように
criteria.add(Restrictions.eqOrIsNull("foo", ""));
.add(Restrictions.eqOrIsNull("bar", ""));
であり、私が唯一のfoo
上の基準を追加するとき、それは2つの行を返します。しかし、bar
の場合、2番目の値だけが返されます。これは空です。
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("")
。グレゴリー
answeredのように、
eq
と
isNull
の論理和を使うべきだった。このコードは何をしたいない場合
この種の問題では、デバッグログを有効にする必要があります。これは、実行中のSQLをHibernateで印刷します。 – adam0404
これは 'foo、select bar from table where foo =のようなものですか? bar =? ' – hsluo