色々難しく考えすぎていた事が判明。特にパフォーマンス周り。
まずは、ストレートな感じのを実装します。


ここの所、アノテーションを追加する事で、
1:Nマッピングで、Nを取る際のクエリを分離するオプションの事をずっと考えていました。




以下、今日の思い付き。


RELQUERYアノテーションを追加する事で、複数のクエリの発行によってNの部分を取得します。

public static String employees_RELQUERY = "multi";
public static String employees_RELKEY = "deptno:deptcd";

multiを記述すると、通常のSELECT文を発行した後に、
RELKEYアノテーションを使用するなどして、自動生成出来うるSELECT文を自動生成して、
再度発行したSQLの結果セットを元に、Nの部分を構成します。

public static String employees_RELQUERY 
    = EmployeeDao.class.getName() + "#getEmployees";
public static String employees_ARGS = "deptno";

RELQUERYアノテーションでは、他のDAOのメソッドを指定する事も出来ます。
その際、ARGSアノテーションを指定すると、
1度目のSQLで取得した1:Nの1側のオブジェクトのメンバ変数を使って、
当該DAOを呼び出します。
ARGSアノテーションを省略すると、
指定したDAOのメソッドのARGSアノテーションで指定されている変数名と
1:Nの1側のオブジェクトのメンバ変数名をマッピングして当該DAOを呼び出します。
ここでのARGSアノテーションは、DAOに記述するARGSアノテーションと同じ仕様になります。
これによって、N側を取得するSQLを分離したとしても、
ハンドメイドのSQLを発行する事が出来るようになります。
N:1マッピングで既に取得されているオブジェクトを、
ARGSアノテーションに指定する事で複雑な引数を渡す事も出来ます。


RELQUERYアノテーションのデフォルト値は、single
つまり、一回のSQLで1:Nの、Nの部分まで全部取ってきて処理をします。