私は現在EbeanでPlayFramework2を使用していますが、質問はどのJPA ORMにも当てはまるようですので、Hibernate、TopLink、その他のソリューションをお気軽に提案してください。
ソーシャルネットワーク構築のためのいくつかの基本クラスを設計したいと思います。私の意見では、各クラスにID、名前、説明、他のクラスとの関係などの基本的なフィールドがほとんどないクラス階層にする必要があります。フレームワークユーザーは、このクラスを継承し、必須フィールドを追加することでそれらを特殊化できます。例を考えてみましょう:
フレームワーククラス
@MappedSuperclass
class AbstractUser {
@Id
Long id;
String login;
String password;
@ManyToMany
Set<AbstractGroup> groups;
}
@MappedSuperclass
class AbstractGroup {
@Id
Long id;
String name;
}
フレームワーククラスを使用した私のソーシャルネットワーク
@Entity
class MyUser extends AbstractUser {
String name;
String surname;
}
@Entity
class MyGroup extends AbstractGroup {
String groupDescription;
}
ここで必要なのは、AbstractUserクラスとAbstractGroupクラスを、それらの関係を維持しながら、いくつかのフィールドで拡張することです。
JPAがなければ、たとえばジェネリックやDIで解決できます。しかし、JPAでそのようなアイデアを実装するにはどうすればよいでしょうか。出来ますか?