【发布时间】:2011-11-16 12:41:11
【问题描述】:
我不喜欢直接使用模型对象,因为这会破坏封装。相反,我更喜欢Repository Pattern。
当我尝试实现一个简单的存储库时
public abstract class BaseRepository<T extends Model> {
public T findOne(String query, Object... params) {
GenericModel.JPAQuery result = T.find(query, params);
return result.first();
}
}
public class UserRepository extends BaseRepository<User>{}
UserRepository repo = new UserRepository();
repo.findOne("byUsername", "test");
由于 java 的泛型或 JPA 注释的工作方式,我得到了异常:
java.lang.UnsupportedOperationException: Please annotate your JPA model with
@javax.persistence.Entity annotation.
at play.db.jpa.GenericModel.find(GenericModel.java:269)
at repositories.BaseRepository.findOne(BaseRepository.java:12)
有没有办法解决这个问题?
(不用说模型已正确注释,当我直接使用它时说 User.find("byUsername", "test").first() 效果很好)。
【问题讨论】:
-
您能否提供实际调用
findOne()并引发异常的代码示例? -
@pHk -
UserRepository repo = new UserRepository(); repo.findOne("byUsername", "testy"); -
这很奇怪。恐怕我现在没有太多帮助了,但我真的很好奇为什么这会导致对
GenericModel的静态调用。 -
@pHk - 好的,感谢您的帮助。那你可以删除你的答案吗,因为它不是很相关?
标签: java jpa persistence playframework repository-pattern