我正在尝试为我的 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());
}
}
上述方法的调用如下,在我的 Controller 的 GET 方法中,根据通过特定路由请求哪个模型:
getModel(new User(), params);
由于 find() 方法实际上是 GenericModels 类的静态方法,因此它应该完全可能。但是,由于 Play 为每个定义的模型生成代码,我收到此错误:
发生了 UnsupportedOperationException:请使用 @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());
}
并按如下方式调用它:
getModel(new User(), User.class, params);
关于java - Play 的通用包装方法!楷模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7334416/