Play 的通用包装方法!型号

发布于 2024-12-03 12:15:55 字数 721 浏览 0 评论 0原文

我正在尝试为我的 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 方法?

I'm trying to implement a RESTful interface for my Play! framework models using a generic wrapper.

I want to use a generic method to call and return each model's respective "find" methods.

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());
}

}

The above method is called as follows, in my controller's GET method according to which model is requested through a particular route:

getModel(new User(), params);

Since the find() methods are actually static methods of the GenericModels class, it should entirely be possible. However, since Play generates the code for each defined model I get this error:

UnsupportedOperationException occured : Please annotate your JPA model with @javax.persistence.Entity annotation.

At least, I think that's why. Is there no way around this? Am I forced to tediously implement the same GET, PUT, UPDATE, DELETE methods for each class?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

玩世 2024-12-10 12:15:55

我认为“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);

I think "model.findById" calls the GenericModel.findById static function which is not implemented and generates the exception. It doesn't call the static function enhanced by JPAPlugin at runtime.

I'm not sure it will work but you should try to call directly JPQL function, something like:

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());
}

and call it like the following:

getModel(new User(), User.class, params);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文