Предположим, у меня есть сущность Post и сущность Comment, а также отношение один ко многим:
@Entity class Post {
...
@OneToMany
List<Comment> comments;
...
}
Как мне добиться пейджинга следующим образом:
Post post = //Find the post.
return post.getComments().fetch(100, 10); // Find the 11th page (page size 10);
Возможно лиэмулировать динамический пейджинг с коллекциями @OneToMany поверх JPA, или мы должны полностью переписать механизм ассоциации JPA?(например, создать тип коллекции PersistentList, который мог бы управлять поиском, сортировкой и поиском).
PS: я недавно нашел Play!Фреймворк использует очень интересную библиотеку поверх JPA: Сиена.Сиена очень проста в использовании и является хорошей абстракцией поверх JPA / Hibernate.Но я не могу найти, как сделать пейджинг с его ассоциациями.
Обновление:
Платформа воспроизведения имеет синтаксис запроса, подобный Django:
Post.findAll().from(100).fetch(10); // paging
, где
Post.findAll()
вернет объект JPAQuery, настроенный тип запроса в Play.
Но со связанными коллекциями, например:
Post.comments
просто вернет List, который нене поддерживает разбиение на страницы или другие запросы.
Мне было интересно, как его расширить, чтобы
Post.comments
также возвращал объект JPAQuery или аналогичный, тогда вы можете выполнить запрос по запросу"collection:
Post.comments.from(100).fetch(10);
или вставьте новый комментарий, фактически не извлекая ни одного комментария:
Post.comments.add(new Comment(...));
По моей первой мысли мы могли создать подкласс List, а затем Post.класс станет:
@Entity class Post {
...
@OneToMany
QueryList<Comment> comments;
...
}
, и QueryList будет иметь методы fetch (), from (), которые являются косвенными для JPAQuery.
Но я не знаю, распознает ли это Hibernate / JPA,или мешать ему.