gpt4 book ai didi

java - 泛型和 Play 框架

转载 作者:搜寻专家 更新时间:2023-11-01 01:46:53 24 4
gpt4 key购买 nike

我正在使用当前版本的 Play Framework,我的模型类扩展了 play.db.jpa.JPABase。

今天我尝试将一种经常使用的查询类型变成通用的,并定义一个静态辅助方法来构造它。

我写了以下内容:

import play.db.jpa.Model;
import play.libs.F;

public class GenericQueries {

public static <T extends Model> F.Option<T> firstOption(
Class<T> clazz,
String query,
Object... parameters){

final T queryResult = T.find(query,parameters).first();

return (queryResult == null) ?
F.Option.<T>None() :
F.Option.Some(queryResult);
}
}

但是,我收到以下错误:

Execution exception

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

我调试了该方法,在运行时 T 似乎已正确设置为其对应的模型类。我什至看到了注释。

我怀疑是玩游戏的人使用了一些增强类的巫术,但我不完全确定。

有什么想法吗?

更新:根据要求添加了模型类

这是我使用的模型类之一的简化​​版本。

package models;

import org.apache.commons.lang.builder.ToStringBuilder;
import play.data.validation.Required;
import play.db.jpa.Model;
import play.modules.search.Field;
import play.modules.search.Indexed;

import javax.persistence.Column;
import javax.persistence.Entity;
import java.util.Date;

@Entity @Indexed
public class FooUser extends Model {

@Required
public Date firstLogin;

@Field
@Required(message = "needs a username")
@Column(unique = false,updatable = true)
public String name;

@Field
public String description;

@Required
public boolean isAdmin;

@Override
public String toString(){
return new ToStringBuilder(this)
.append("name", name)
.append("admin", isAdmin)
.toString();
}
}

最佳答案

在 Play 中,实体应该扩展 play.db.jpa.Model 并使用 @Entity 注释(类级别)。

对于你所说的,我理解你正在扩展 play.db.jpa.JPABase。

这可能是问题的原因,因为 Play(如您所指)动态增强类并且它可能与您的继承发生冲突。

编辑:我测试了这个问题

问题是 Play 没有增强对象 T。这意味着 find 方法调用了 GenericModel(模型的父级)的 id,其实现是抛出消息异常。

增强器似乎只检测带有@Entity 的类。

连mericano1的解都不行,enhancer也不pick。所以我觉得你将无法在 Play 中使用该方法。

关于java - 泛型和 Play 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6939342/

24 4 0
文章推荐: javascript - 如何在 Javascript 中获取相对路径?
文章推荐: javascript - 动态的跨浏览器脚本加载
文章推荐: javascript - 如何使用 javascript 选择 的