Мне не нравится работать с объектами моделей напрямую, потому что это нарушает инкапсуляцию. Вместо этого я предпочитаю Шаблон репозитория .
Когда я пытаюсь реализовать простой репозиторий
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()
, она работает хорошо).