重要:请注意我正在谈论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
可以帮助我避免这个问题,但事实并非如此。
我做错了什么,以及如何让它正常工作?
感谢。
答案 0 :(得分:0)
不幸的是(这也是我的痛苦)Ebean还没有支持泛型:
https://groups.google.com/forum/#!searchin/ebean/generics/ebean/QWjpI0LRCiA/io-Lm_gfYE4J
答案 1 :(得分:0)
很遗憾,您无法从类 MyGenericModel 调用 all()函数,因为该函数在运行时已得到增强,且仅适用于使用 @Entity注释的类强>
可能的解决方案可能是您使用自己的实体管理器进行查询。
或者你可以回到你的第一个选择,那没有错:)