我正在尝试为我的Play实现RESTful界面!使用通用包装器的框架模型。
我想使用泛型方法来调用并返回每个模型各自的“查找”方法。
private static <T extends GenericModel> void getModel(T model, Params params){
if (params._contains("id")){
renderJSON(model.findById(params.get("id", Long.class)));
}
else{
renderJSON(model.findAll());
}
}
上面的方法在我的控制器的GET方法中被调用,根据通过特定路径请求模型:
getModel(new User(), params);
由于 find()方法实际上是GenericModels类的静态方法,因此它应该是完全可能的。但是,由于Play为每个定义的模型生成代码,因此出现此错误:
发生UnsupportedOperationException:请使用@ javax.persistence.Entity批注注释您的JPA模型。
至少,我认为这就是原因。有没有办法解决这个问题?我是否被迫为每个课程繁琐地实施相同的GET,PUT,UPDATE,DELETE方法?
答案 0 :(得分:1)
我认为“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());
}
并将其称为以下内容:
getModel(new User(), User.class, params);