ログ日記

作業ログと日記とメモ

S2JDBCのwhereでor検索

or検索を調べる → ComplexWhereを見つける → ソースを書き直す → SimpleWhereだけで出来るというコメントを見つける → ソースを書き直す → タイプセーフAPIを使うならSimpleWhereはよくないという記述を見つける


orz



最初にここを読んだ。
http://d.hatena.ne.jp/Johnnydaisuke/20090106/1231275226


で、コメントまでよく読んでみると…

Operations クラスの static メソッドに or(Wehere...) が用意されているので,ServiceClass2 は
〜.where(or(wheres, wheres2)).〜
と書くことができます.
http://s2container.seasar.org/2.4/ja/s2jdbc_typesafe.html#Operations_クラス
ComplexWhere はもう使うことないかもです.

http://d.hatena.ne.jp/Johnnydaisuke/20090106/1231275226


これを見て更にソースを書き換えた後に公式のドキュメントの記述を発見。

SimpleWhere クラスを使った場合,プロパティの型とパラメータの値の整合性はチェックされません. タイプセーフに使うには, SimpleWhere クラスではなく, 後述の Operations クラス を使用してください.

〜〜

jdbcManager.from(Employee.class)
    .where(
        eq(name(), name),
        gt(salary(), salary))
    .getResultList();
http://s2container.seasar.org/2.4/ja/s2jdbc_typesafe.html

サービスクラスはS2JDBC-Genで作っているのでeqやandやorと書くだけでいけた。
随分遠回りをした。