このようにMySQLに2つの行があります
+---------+---------+
| foo | bar |
+---------+---------+
| | NULL |
| | |
+---------+---------+
empty は空の文字列""
です。
今は両方手に入れたいと思っています。Criteria
両方の列でandを使用しRestrictions.eqOrIsNull()
ていますが、常に 1 行しか返されません。
コードはこんな感じ
criteria.add(Restrictions.eqOrIsNull("foo", ""));
.add(Restrictions.eqOrIsNull("bar", ""));
のみに基準を追加するとfoo
、2行が返されます。ただし、 のbar
場合、空の秒のみが返されます。
javadocは、Apply an "equal" constraint to the named property. If the value is null, instead apply "is null".
だから私はこれを間違っているのですか、それとも他の方法で使用する必要がありますか?
更新:
申し訳ありませんが、私はとても不注意です。ドキュメントはそれを明確に述べています。value
このメソッドは、DB に格納されている名前付きプロパティの実際の値ではなく、渡された値に従って機能します。Github
のソース コード:
public static Criterion eqOrIsNull(String propertyName, Object value) {
return value == null
? isNull( propertyName )
: eq( propertyName, value );
}
だから私の場合、eqOrIsNull
戻りますeq("")
。グレゴリーが答えeq
たように、 andの選言を使うべきでした。isNull