[seasar-s2dao-dev:104] Re: Next S2Dao Criteria
Yasuo Higa
higa @ isid.co.jp
2007年 1月 4日 (木) 19:43:00 JST
ひがです。
Next S2DaoにCriteriaの機能を組み込みたいと思います。
っていってもHibernateのようなものではなく、DBFluteの
ConditionBean、CodeGenのFindDtoの機能を標準で取り込む感じ。
Criteriaは、Entityを拡張して作ることを想定しています。
public class EmpCriteria extends Emp {
private String[] ename_IN;
...
}
criteria.setEname_IN("SCOTT", "KING");
List<Emp> dao.findAll(criteria);
equal条件以外をcriteriaに追加していく感じ。
Criteriaで認識する特殊なプロパティ配下のとおりです。
String orderby(ソート順)
Integer firstResult(Pagingのoffset)
Integer maxResults(Pagingのlimit:件数)
String[] fetchJoins(この後説明)
Next S2Daoでは、N:1,1:Nをサポートしますが、
デフォルトだと関連はフェッチしません。
それを1回のSQLで取得するのがfetchjoinsの指定。
関連のプロパティ名を指定します。
criteria.setFetchJoins("dept", "projects")
ネストしたN:1も指定できます。
criteria.setFetchJoins("aaa.bbb", "ccc")
デフォルトは、left outer joinですが、inner joinも
指定できます。
criteria.setFetchJoins("dept inner", "projects")
1:Nには、orderbyも指定できます。
criteria.setFetchJoins("projects orderby pname desc")
1:Nをeager(1回のSQL)でfetchできるのは、最初に指定されたやつで
2つ目以降は、immediateで取得に行きます。
immediateとは、複数回SQLは発行するが、
find後には、値が入って返ってくること。
fetchJoinsのもう一つの使い方は、fillメソッドです。
本邦初公開(笑)
interface EmpDao {
Emp fill(Emp emp, String... fetchJoins);
}
与えられたEntityの関連をうめて(fill)返します。
画面から入力されたEntityの情報を元に
必要な関連を埋めるためのメソッド。
fillが埋めるだけなのに、戻り値で新しいEntityを
返しているのは意味がありますが、別メールで。
Yasuo Higa
The Seasar Project
seasar-s2dao-dev メーリングリストの案内