[Seasar-user:14367] Re: [S2JDBC]ComplexWhereのandの処理
Shuji Aono
[E-MAIL ADDRESS DELETED]
2008年 5月 21日 (水) 23:26:21 JST
お世話になっております。 青野です。
たしかにいきなりand()を呼び出してるわけですが、
>通常の SQL で WHERE AND c = 3 OR d = 4
もちろん、そんなように生成されるならComplexWhereは使用いたしません。
現状だと、 "and (c = 3 or d = 4)" が生成されるわけでなく,"c = 3 or d =4)"が生成されることになります。
and()のソースを見てみると分かりますと思いますが
いきなりand()が呼ばれた場合に 頭の" and ("が、生成されないように下記のように回避処理が記述されています。
> if (criteriaSb.length() > 0) {
> criteriaSb.append(" and (");
> }
なのに、後ろの")"の回避処理がないということ、おかしくはないでしょうか?
> criteriaSb.append(factorCriteria).append(")"); <-appendの部分
以上、宜しくお願いいたします。
2008/05/21 19:30 Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>:
> 小林 (koichik) です.
>
> Date: Wed, 21 May 2008 19:05:51 +0900
> From: "Shuji Aono" <[E-MAIL ADDRESS DELETED]>
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:14358] [S2JDBC]ComplexWhereのandの処理
>
>> ComplexWhere w = new ComplexWhere();
>> w.and(new ComplexWhere().eq("c", 3).or().eq("d", 4));
>>
>> このような書き方をしてw.getCriteria()で取得すると"(c = ?) or (d = ?))" という文字列が帰ってくると思います。
>> 最後の")"は余計だと思います。テストコードを書いて実行しておりませんの勘違いの場合は申し訳ありません。
>
> いきなり and() を呼び出しているせいです.
> 通常の SQL で WHERE AND c = 3 OR d = 4 と
> 書かないのと同じように,ComplexWhere でも
> いきなり and() を呼び出してはいけません.
>
> ComplexWhere の使い方は ComplexWhere のテストクラス
> (ComplexWhereTest) を参考にしてください.
>
>
> --
> <component name="koichik">
> <property name="fullName">"Koichi Kobayashi"</property>
> <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
> <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内