[Seasar-user:14177] Re: DBFlute LikeSearchOptionでの半角スペース処理

kubo [E-MAIL ADDRESS DELETED]
2008年 5月 15日 (木) 01:16:20 JST


久保です。

> 今回は入力された文字列をそのまま検索にかけておりますが
>>半角変換、日本語変換機能
> の機能があることは存じませんでした。
>
> ちょっと調べてみようと思います。

new LikeSearchOption().toSingleByteAlphabetNumber();
とすると、「全角のアルファベットと数字を半角に」
(DBには全部アルファベットなどが半角で入ってることが前提の場合に有効)

new LikeSearchOption().localJapanese().toDoubleByteKatakana();
とすると、「半角のカタカナを全角に」
(DBには全部全角カタカナで入ってることが前提の場合に有効)

new LikeSearchOption().localJapanese().removeLastLongVowel();
とすると、「"オーダー"を"オーダ"に(後ろの延ばし棒を除去)」
("オーダー"と入力されて"オーダ"もヒットさせたい場合に有効)

という感じです。
と、逆方向が無かったりして中途半端なのですが、
Like検索だとこういった要件も時にはあるため、
一応こんな機能を用意しています。
(以前実際の案件で使いました)

2008/5/14 宇枝 祐樹 <[E-MAIL ADDRESS DELETED]>:
> 久保様
>
> お世話になっております。
> 上田です。
>
> 下記、ありがとうございます。
>
>>mydbflute/dbflute-0.6.4/templates/om/java/allcommon/cbean/coption/parts
> こちら確認してみたいと思います。
>
>>その方法だと、LikeSearchOptionの他の機能が
>>利用できなくなりますが、非常にマニアックな機能ですので
>>利用されていないならばそれでもOKです。
>>(大文字小文字変換、半角変換、日本語変換機能ですね)
>
> 今回は入力された文字列をそのまま検索にかけておりますが
>>半角変換、日本語変換機能
> の機能があることは存じませんでした。
>
> ちょっと調べてみようと思います。
>
>
> kubo さんは書きました:
>> 久保です。
>>
>>
>>>  こちらの回避方法ですが、修正するテンプレートがわかりませんで
>>>  自動生成されるクラス(LikeSearchOptionなど)の内部処理を
>>>  調整できるファイルがあるのでしょうか?
>>>
>>
>> DBFlute本体モジュールの
>> mydbflute/dbflute-0.6.4/templates/om/java/allcommon/cbean/coption/parts
>> 配下のxxx.vmファイルになります。
>>
>>
>>>  LikeSearchOptionで利用していたメソッドを独自作成クラスで
>>>  再定義し、
>>>  LikeSearchOption#generateRealValue(String value)にあった
>>>  value = super.generateRealValue(value);
>>>  を再定義したメソッドで削除する形にすることで、
>>>  回避はできているようです。
>>>
>>
>> その方法だと、LikeSearchOptionの他の機能が
>> 利用できなくなりますが、非常にマニアックな機能ですので
>> 利用されていないならばそれでもOKです。
>> (大文字小文字変換、半角変換、日本語変換機能ですね)
>>
>>
>> 2008/5/14 宇枝 祐樹 <[E-MAIL ADDRESS DELETED]>:
>>
>>> 久保様
>>>
>>>  お世話になっております。
>>>  上田です。
>>>
>>>  現状の回避方法で質問させていただきたくメールいたしました。
>>>
>>>
>>>  >A. テンプレートを修正してしまう。
>>>  >上記3つのクラスのgenerateRealValue()の引数チェックを
>>>  >まるごと削除して自動生成し直します。
>>>
>>>  こちらの回避方法ですが、修正するテンプレートがわかりませんで
>>>  自動生成されるクラス(LikeSearchOptionなど)の内部処理を
>>>  調整できるファイルがあるのでしょうか?
>>>  (自動生成されたクラスに手を加えても認識されないのですね。)
>>>
>>>  >B. LikeSearchOptionを継承した独自クラスを作成する。
>>>  こちら作成してみました。
>>>
>>>  LikeSearchOptionで利用していたメソッドを独自作成クラスで
>>>  再定義し、
>>>  LikeSearchOption#generateRealValue(String value)にあった
>>>  value = super.generateRealValue(value);
>>>  を再定義したメソッドで削除する形にすることで、
>>>  回避はできているようです。
>>>
>>>  上田
>>>
>>>  kubo さんは書きました:
>>>
>>>
>>>
>>>> 久保です。
>>>>
>>>  >
>>>  >
>>>  >>  申し訳ありません。こちらDBFluteのバグです。
>>>  >>  そもそもここに引数はチェック不要です。
>>>  >>  次バージョンでは直したものを反映させます。
>>>  >>
>>>  >
>>>  > 新バージョンで直して、検証テストも追加しました。
>>>  > 今週末あたりでリリースいたします。
>>>  >
>>>  > 2008/5/13 kubo <[E-MAIL ADDRESS DELETED]>:
>>>  >
>>>  >> 久保です。
>>>  >>
>>>  >>  上田さん、こんばんわ
>>>  >>
>>>  >>
>>>  >>  ToUpperLowerCaseOptionParts
>>>  >>  ToSingleByteOptionParts
>>>  >>  JapaneseOptionPartsAgent
>>>  >>  のgenerateRealValue()の引数チェックですね。
>>>  >>
>>>  >>  if (value == null || value.trim().length() == 0) {
>>>  >>
>>>  >>  申し訳ありません。こちらDBFluteのバグです。
>>>  >>  そもそもここに引数はチェック不要です。
>>>  >>  次バージョンでは直したものを反映させます。
>>>  >>
>>>  >>  ご利用のバージョンのままでの回避方法ですが、
>>>  >>
>>>  >>  A. テンプレートを修正してしまう。
>>>  >>
>>>  >>  上記3つのクラスのgenerateRealValue()の引数チェックを
>>>  >>  まるごと削除して自動生成し直します。
>>>  >>
>>>  >>  B. LikeSearchOptionを継承した独自クラスを作成する。
>>>  >>
>>>  >>  LikeSearchOptionさえ継承していれば動きますので、
>>>  >>  サブクラスでオーバーライドして動きを変えてしまえば
>>>  >>  回避できるかもしれません。
>>>  >>
>>>  >>
>>>  >>
>>>  >>  2008/5/13 宇枝 祐樹 <[E-MAIL ADDRESS DELETED]>:
>>>  >>
>>>  >>
>>>  >>
>>>  >>> いつもお世話になっております。
>>>  >>>
>>>  >>  >  上田と申します。
>>>  >>  >
>>>  >>  >  DBFluteのLikeSearchOptionで質問させていただきたいです。
>>>  >>  >
>>>  >>  >  ------------------
>>>  >>  >  環境
>>>  >>  >  Seasar2 2.4.22
>>>  >>  >  dbflute-0.6.4
>>>  >>  >  --------------------
>>>  >>  >
>>>  >>  >  検索条件に半角スペースのみ入力した場合にExceptionが発生してしまい
>>>  >>  >  回避方法が見つからずにおります。
>>>  >>  >
>>>  >>  >  Exceptionは
>>>  >>  >  java.lang.IllegalArgumentException: The argument[value] should not be null.
>>>  >>  >  と出ております。
>>>  >>  >
>>>  >>  >  内部でjava.lang.String.trim()がかかっており、その為だとは思うのですが、
>>>  >>  >  これを回避する方法をご存知の方、いらっしゃらないでしょうか?
>>>  >>  >
>>>  >>  >  外だしSQLですと、現在の実装方法とだいぶ異なってしまうので
>>>  >>  >  避けたいところではあるのですが。
>>>  >>  >
>>>  >>  >  恐れ入りますが、ご教授のほど、宜しくお願い致します。
>>>  >>  >
>>>  >>  >  上田
>>>  >>  >
>>>  >>  >
>>>  >>  >
>>>  >>  >  _______________________________________________
>>>  >>  >  Seasar-user mailing list
>>>  >>  >  [E-MAIL ADDRESS DELETED]
>>>  >>  >  https://ml.seasar.org/mailman/listinfo/seasar-user
>>>  >>  >
>>>  >>
>>>  >>
>>>  > _______________________________________________
>>>  > Seasar-user mailing list
>>>  > [E-MAIL ADDRESS DELETED]
>>>  > https://ml.seasar.org/mailman/listinfo/seasar-user
>>>  >
>>>  >
>>>  >
>>>  >
>>>
>>>
>>>  _______________________________________________
>>>  Seasar-user mailing list
>>>  [E-MAIL ADDRESS DELETED]
>>>  https://ml.seasar.org/mailman/listinfo/seasar-user
>>>
>>>
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
>>
>>
>>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内