重要: 私は Play について話していることに注意してください! 2.x ではなく、フレームワーク バージョン 1 (1.2.6)
Play に 2 つのエンティティがあります。そのようなv1アプリケーション:
@Entity
@Table(name = "T_FOO")
public class Foo extends GenericModel {
@Id
@Column(name = "NAME")
public String name;
public static List<Foo> paginate(int start, int count) {
return all().from(start).fetch(count);
}
}
と
@Entity
@Table(name = "T_BAR")
public class Bar extends GenericModel {
@Id
@Column(name = "NAME")
public String name;
public static List<Bar> paginate(int start, int count) {
return all().from(start).fetch(count);
}
}
私のコントローラでは、問題なくそれを行うことができます:
public static void index() {
List<Foo> foo = Foo.paginate(1, 5);
List<Bar> bar = Bar.paginate(2, 5);
render(foo, bar);
}
ご覧のとおり、これら 2 つのエンティティは非常に似ているため、一般的なメソッドを再グループ化するためにスーパー クラスを作成しました。
@MappedSuperclass
public class MyGenericModel<T> extends GenericModel {
public static <T> List<T> paginate(int start, int count) {
return all().from(start).fetch(count);
}
}
それをエンティティの親として作成します。次に例を示します。
@Entity
@Table(name = "T_FOO")
public class Foo extends MyGenericModel<Foo> {
@Id
@Column(name = "NAME")
public String name;
}
Foo.paginate()
ただし、この変更により、メソッドを呼び出そうとすると次のエラーが発生します。
UnsupportedOperationException occured : Please annotate your JPA model with @javax.persistence.Entity annotation.
play.exceptions.JavaExecutionException: Please annotate your JPA model with @javax.persistence.Entity annotation.
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:237)
at Invocation.HTTP Request(Play!)
Caused by: java.lang.UnsupportedOperationException: Please annotate your JPA model with @javax.persistence.Entity annotation.
どうやらプレイ!は、私が望んでいない注釈MyGenericModel
で@Entity
注釈を付けたいと思っています。MyGenericModel
で注釈を付けるとこの問題を回避できると思い@MappedSuperclass
ましたが、そうではありません。
私は何を間違えましたか、そしてそれを正しく機能させるにはどうすればよいですか?
ありがとう。