[Seasar-user:12657] [SAStruts + S2JDBC]

出羽 健一 [E-MAIL ADDRESS DELETED]
2008年 1月 28日 (月) 17:07:02 JST


出羽です、お疲れ様です。

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件になってしまいます。)

同様に、『and T1_.NAME like '%'』の条件についても
NAMEフィールドの値が null のレコードがヒットしないので、
生成しなくても良いと思ったのですがいかがでしょうか?


jarファイルのバージョン等は、
sa-struts-tutorial-1.0.0.zip と同じです。



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