1:Nマッピング
アクセサに関する仕様をどうするか考え中です。アイディアが沢山ある訳では無いのですが…
- 単に、java.util.Collectionのサブクラスを引数に取るアクセサがあったらそれを使う。
仕組みとして必須になるのはsetterのみになります。
型が明らかにならないのでアノテーションなりなんなりで、型を設定出来なければなりません。
コードとしては、こんな感じになりますね。
public class Depertment {
public static final Class employees_BEAN = Employee.class;
public void setEmployees(List emps); // 3つのうちどれか1つがあればOK
public void setEmployees(Set emps);
public void setEmployees(Collection emps);
}
- JavaBeans風にする。StrutsのActionFormで配列を扱う時と同じですね。
こんな感じのメソッドを期待します。getterとsetterの両方が必須になります。
1:NのNの件数分だけgetEmployeeが呼び出され、同じ回数setEmployeeが呼び出されます。
型がアクセサから明らかになるのがポイントです。
但し、幾つか落とし穴があり、正しく処理を実装するのが意外と難しかったりします。
まぁ、ユーティリティメソッドの1つも提供すれば済む話ですが…。
public class Depertment {
public Employee getEmployee(int index);
public void setEmployee(int index, Employee emp);
}
- ハイブリッドな(?)案もあったりします。
public class Depertment {
public void setEmployees(Employee[] emps);
}
どれもそれなりに、一長一短あるかなぁ…と。僕が個人的に好きなのは、ハイブリッドな案だったりします。
但し、Javaは固定長配列に対するサポートがちょっと消極的な感があるので、イマイチですが…。