[Seasar-user:12660] Re: [SAStruts + S2JDBC]
出羽 健一
[E-MAIL ADDRESS DELETED]
2008年 1月 28日 (月) 18:58:07 JST
ひが様
出羽です。
> これを防ぐためには、S2BeanUtilsの呼び出しで、
> excludesWhitespace()を指定してください。
>
> T1_.NAME like '%'についても、これで対応できるはずです。
バッチリ対応できました。
有難うございます。
> -----Original Message-----
> ひがです。
>
> > 出羽です、お疲れ様です。
> >
> > SAStruts + S2JDBCで以下のような日付範囲検索
> > プログラムを実装してみました。
> >
> >
> > /** 検索条件: 従業員名の前方一致 */
> > public String condition_name_STARTS;
> >
> > /** 検索条件:入社日の範囲検索(開始) */
> > @DateType
> > public String condition_hireDate_GE;
> >
> > /** 検索条件:入社日の範囲検索(終了) */
> > @DateType
> > public String condition_hireDate_LE;
> >
> > @Execute(validator = false)
> > public String list() {
> > empItems = jdbcManager.from(Emp.class)
> > .leftOuterJoin("dept")
> > .where(Beans.createAndCopy(BeanMap.class, this)
>
> > .prefix("condition_")
> > .dateConverter("yyyyMMdd", "hireDate")
> > .execute())
> > .orderBy("hireDate")
> > .getResultList();
> > return "list.jsp";
> > }
> >
> >
> > 以下は、condition_name_STARTS プロパティ、及び、
> > condition_hireDate_LEプロパティに空文字が
> > セットされた場合に 生成されるSQLです。
> >
> >
> > select
> > T1_.ID, T1_.NAME, T1_.HIRE_DATE,
> > T1_.DEPT_ID, T1_.VERSION_NO,
> > T2_.ID, T2_.NAME, T2_.VERSION_NO
> > from
> > EMP T1_ left outer join DEPT T2_ on T1_.DEPT_ID = T2_.ID
> > where
> > T1_.HIRE_DATE >= '1982-01-01'
> > and T1_.NAME like '%'
> > and T1_.HIRE_DATE <= null
> > order by
> > T1_.HIRE_DATE
> >
> > 『and T1_.HIRE_DATE <= null』の条件は
> > 生成しなくても良いと思ったのですがいかがでしょうか?
> > (検索結果が0件になってしまいます。)
> >
> BeanMapにコピーされた段階では空文字なので、
> whereに渡されたときには、nullではないと判断され、
> 条件に足されます。
>
> その後、Conversion系の修正により、空文字は、nullに
> 変換されるようになったので、T1_.HIRE_DATE <= ""
> がT1_.HIRE_DATE <= nullに変換されて実行されます。
>
> これを防ぐためには、S2BeanUtilsの呼び出しで、
> excludesWhitespace()を指定してください。
>
> T1_.NAME like '%'についても、これで対応できるはずです。
>
> よろしくお願いします。
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内