Important: veuillez noter que je parle de Play! framework version 1 (1.2.6), pas 2.xJouez! framework n'accepte pas mon @MappedSuperclass sans l'annotation @Entity
J'ai 2 entités dans mon jeu! v1 demande, comme ça:
@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);
}
}
et
@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);
}
}
Dans mon contrôleur, je peux le faire sans problème:
public static void index() {
List<Foo> foo = Foo.paginate(1, 5);
List<Bar> bar = Bar.paginate(2, 5);
render(foo, bar);
}
Comme vous pouvez le voir, ces 2 entités sont assez similaire, j'ai donc créé une super classe pour regrouper les méthodes courantes:
@MappedSuperclass
public class MyGenericModel<T> extends GenericModel {
public static <T> List<T> paginate(int start, int count) {
return all().from(start).fetch(count);
}
}
et faire en tant que parent de mes entités, par exemple:
@Entity
@Table(name = "T_FOO")
public class Foo extends MyGenericModel<Foo> {
@Id
@Column(name = "NAME")
public String name;
}
Cependant, avec cette modification, je reçois l'erreur suivante lorsque je tente d'appeler Foo.paginate()
méthode:
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.
Il semble que Play! veut que j'annote MyGenericModel
avec l'annotation @Entity
, que je ne veux pas. Je pensais que l'annotation MyGenericModel
avec @MappedSuperclass
m'aiderait à éviter ce problème, mais ce n'est pas le cas.
Qu'est-ce que j'ai fait de mal, et comment le faire fonctionner correctement?
Merci.
Merci pour votre réponse. Juste 2 commentaires: 1. Pourquoi GenericModel (de Play! API) fonctionne-t-il alors? Il utilise les méthodes 'all()' (ainsi que les autres) 2. J'ai simplifié ma question, mais en fait j'ai 20 entités concernées, donc plusieurs copies-pâtes. – romaintaz