Как я могу сделать пейджинг с коллекциями @OneToMany
Предположим, у меня есть сущность 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, который мог бы управлять поиском, сортировкой и поиском).
П.С .: Я недавно нашел Play! Фреймворк использует очень интересную библиотеку поверх JPA: Сиена. Сиена очень проста в использовании и является хорошей абстракцией поверх JPA / Hibernate. Но я не могу найти, как сделать пейджинг с его ассоциациями.
Обновить:
Play Framework имеет синтаксис запроса, похожий на Django:
Post.findAll().from(100).fetch(10); // paging
где
Post.findAll()
вернет объект JPAQuery, настроенный тип запроса в Play.
Но с соответствующими коллекциями, например:
Post.comments
просто вернет список, который не поддерживает пейджинг или другие запросы.
Мне было интересно, как его расширить, чтобы
Post.comments
также вернет объект JPAQuery или аналогичный, затем вы можете запросить в коллекции «query»:
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 это или мешает этому.