EmptyStringQuery

概要

状況依存 のスポット対応の機能です。普段は意識する必要はありません。

基本概念

ConditionBeanの絞り込み条件では、空文字を設定した場合にそれは無効な値として扱われます(無効な条件)。

ただし、空文字をどうしても有効な条件値として扱いたい場合に、ConditionBean の設定で実現できます(@since 0.9.7.8)。ただし、この機能はその ConditionBean の全ての Query 呼び出しで有効になります。一つの ConditionBean で空文字の扱い方が違う場合の利用はお奨めされません。

もし、空文字での条件を "null もしくは空文字" という形式で利用したい場合は、この機能を使うまでもなく IsNullOrEmpty で実現できます。

諸刃の剣

TwoEdgedSword 認定のされた機能です。しっかり精度高く利用しないと、逆にカオスを生み出します。 空文字が "値がないこと" を示すのか "空文字という業務的な値" を示すのか、その場その場でありえる可能性を深く検討してからの利用が推奨されます。

一律の設定

この機能を利用せず一律の設定で無効な値を例外にしたい場合は、DBFluteConfig を利用します。

実装方法

実装の流れ

絞り込み条件などを設定する前に、ConditionBean の allowEmptyStringQuery() を呼び出します。

e.g. ConditionBeanに絞り込み条件が設定されているかどうか (Eclipseでコード補完) @Java
MemberCB cb = new MemberCB();
cb.allEmS // .allEmS と打って enter
--
cb.allowEmptyStringQuery()
cb.query().setMemberAccount_Equal(""); // 空文字等値になる

メソッド仕様

メソッドを呼び出した後の Query 呼び出しのみ設定が有効になります。

LikeSearch の SplitBy

LikeSearch の SplitBy において、例えば、区切り文字が "|" として "FOO||BAZ" というような条件値を設定した場合は、二つ目の要素の空文字の条件は作成されません。 つまり、このメソッドを使う使わないに関わらず同じ挙動(無視される)となります。 (一つでも空白文字が存在すれば、それは空白文字という条件値として扱われ、条件が作成されます)

Union や SubQuery では

Union や SubQuery などの ConditionBean にも設定は継承されます。