我不喜歡直接使用模型對象,因爲這會破壞封裝。相反,我更喜歡Repository Pattern。如何將Play/JPA的Model類與一個通用Repository進行封裝?
當我試圖實現一個簡單的倉庫
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()'嗎? – tmbrggmn
@pHk - 'UserRepository repo = new UserRepository(); repo.findOne(「byUsername」,「testy」);' – ripper234
這很奇怪。恐怕目前我沒有太多的幫助,但我很好奇爲什麼這會導致對GenericModel的靜態調用。 – tmbrggmn