[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 メーリングリストの案内