このように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