Java 游戏的通用包装方法!模型

Java 游戏的通用包装方法!模型,java,generics,annotations,playframework,Java,Generics,Annotations,Playframework,我正在尝试为我的游戏实现一个RESTful接口!使用通用包装器的框架模型 我想使用一个通用方法来调用并返回每个模型各自的“find”方法 因为find()方法实际上是GenericModels类的静态方法,所以它应该是完全可能的。但是,由于Play为每个已定义的模型生成代码,因此出现以下错误: 发生不支持操作异常:请使用@javax.persistence.Entity注释对您的JPA模型进行注释。 至少,我认为这就是原因。这是没有办法的吗?我是否被迫为每个类繁琐地实现相同的GET、PUT、UP

我正在尝试为我的游戏实现一个RESTful接口!使用通用包装器的框架模型

我想使用一个通用方法来调用并返回每个模型各自的“find”方法

因为find()方法实际上是GenericModels类的静态方法,所以它应该是完全可能的。但是,由于Play为每个已定义的模型生成代码,因此出现以下错误:

发生不支持操作异常:请使用@javax.persistence.Entity注释对您的JPA模型进行注释。

至少,我认为这就是原因。这是没有办法的吗?我是否被迫为每个类繁琐地实现相同的GET、PUT、UPDATE和DELETE方法?

我认为“model.findById”调用GenericModel.findById静态函数,该函数未实现并生成异常。它不会在运行时调用JPAPlugin增强的静态函数

我不确定它是否能工作,但您应该尝试直接调用JPQL函数,例如:

private static <T extends GenericModel> void getModel(Class<T> clazz, Params params){
if (params._contains("id")){
  renderJSON(JPQL.instance.findById(clazz.getSimpleName(), params.get("id", Long.class)));
}
else{
  renderJSON(model.findAll());
}

JPQL似乎抛出了相同的错误。使用泛型时,似乎根本无法访问为模型生成的代码播放。无论如何,谢谢你的回答。虽然使用泛型包装器/方法会更优雅,但它似乎是唯一可行的方法。基本上,模型字节码在运行时得到增强,GenericModel.findById函数在类级别被一个新函数替换。因此,由于它是静态的,并且静态函数不是“可重写的”,因此它肯定会调用它在编译时可以找到的函数,而GenericModel中的函数:(…如果我的解决方案不好,那么很抱歉;)!这似乎是框架的限制,而不是您的代码。所以不用担心,我会说这是Java本身的一个限制:染料,我真希望Python在企业领域更受欢迎,那么我只会使用它。
getModel(new User(), params);
private static <T extends GenericModel> void getModel(Class<T> clazz, Params params){
if (params._contains("id")){
  renderJSON(JPQL.instance.findById(clazz.getSimpleName(), params.get("id", Long.class)));
}
else{
  renderJSON(model.findAll());
}
getModel(new User(), User.class, params);