s2hibernate.daoのdto対応について

s2jsf-exampleのs2daos2hibernate.daoに差し替えた版を作成中なのですが、
従業員検索のEmployeeDtoDao.javaの次の記述とSQLファイルの部分をどうしようかなぁと思い。


public String searchEmployeeDtoList_ARGS = "dto";

public List searchEmployeeDtoList(EmployeeSearchDto dto);

対応するEmployeeDtoDao_searchEmployeeDtoList.sql

select empno,ename,job,mgr,hiredate,
sal,comm,deptno,d.dname
from emp e left outer join dept d on e.deptno = d.deptno
/*BEGIN*/
where
/*IF dto.empno != null*/and empno = /*dto.empno*/7788/*END*/
/*IF dto.ename != null*/and ename = /*dto.ename*/'SCOTT'/*END*/
/*IF dto.job != null*/and job = /*dto.job*/'ANALYST'/*END*/
/*IF dto.mgr != null*/and mgr = /*dto.mgr*/7566/*END*/
/*IF dto.fromHiredate != null*/and hiredate >= /*dto.fromHiredate*/'1982-12-01'/*END*/
/*IF dto.toHiredate != null*/and hiredate <= /*dto.toHiredate*/'1982-12-31'/*END*/
/*IF dto.fromSal != null*/and sal >= /*dto.fromSal*/1000/*END*/
/*IF dto.toSal != null*/and sal <= /*dto.toSal*/4000/*END*/
/*IF dto.deptno != null*/and deptno = /*dto.deptno*/20/*END*/
/*END*/


次のような記述で動作する様な実装をしてみています。


// public String searchEmployeeDtoList_ARGS = "dto";
public String searchEmployeeDtoList_PROPERTY = "empno,ename,job,mgr,hiredate >= fromHiredate,hiredate <= toHiredate,sal >= fromSal,sal <= toSal,deptno";

public List searchEmployeeDtoList(EmployeeSearchDto dto);

PROPERTYアノテーションが追加になっています。
PROPERTYアノテーションは、基本的にはdtoのプロパティをカンマ区切りで記述していきます。


A)演算子が"="の条件の場合
「empno,ename,job,mgr」と最後の「deptno」の4つに関しては、
それぞれ、s2daoの「/*IF dto.empno != null*/and empno = /*dto.empno*/7788/*END*/」の様にnullでない場合、
「empno = dto.empno」の様なイメージで検索条件に含めます。


B)ひとつのエンティティdtoのプロパティに、2つ以上の検索条件dtoのプロパティをマッピングするの条件の場合
「hiredate >= fromHiredate,hiredate <= toHiredate,sal >= fromSal,sal <= toSal」に関しては、
それぞれ「[エンティティのdtoのプロパティ名] [演算子] [検索条件のdtoのプロパティ名]」の形式で記述して、
これも、検索条件dtoのプロパティの値がnullでない場合、検索条件に含める動きにしようと考えています。


※検索条件に含めた条件は、すべてandでつなげます。


あと、次のような記述も予定しています。


C)ひとつのエンティティdtoのプロパティに、1の検索条件dtoのプロパティをマッピングするの条件の場合
この場合、 B) の[検索条件のdtoのプロパティ名]を省略できます。
「[エンティティのdtoのプロパティ名] [演算子] [検索条件のdtoのプロパティ名(省略可能)]」
次の「ename like」の様な記述の方法をイメージしています。


// public String searchEmployeeDtoList_ARGS = "dto";
public String searchEmployeeDtoList_PROPERTY = "empno,ename like,job,mgr,hiredate >= fromHiredate,hiredate <= toHiredate,sal >= fromSal,sal <= toSal,deptno";

public List searchEmployeeDtoList(EmployeeSearchDto dto);


ちなみに、いまいま版は、CVSにあげてあります。