重要提示:请注意,我说的是 Play!框架版本 1 (1.2.6),而不是 2.x
我的 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);
}
如您所见,这两个实体非常相似,因此我创建了一个超类来重新组合常用方法:
@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
帮助我避免这个问题,但事实并非如此。
我做错了什么,以及如何使其正常工作?
谢谢。