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は固定長配列に対するサポートがちょっと消極的な感があるので、イマイチですが…。