作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用当前版本的 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/
?
作者热门文章
滴滴打车优惠券免费领取
全站热门文章
|
我是一名优秀的程序员,十分优秀!