如何使用@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);
是否可以在 JPA 之上使用@OneToMany集合模拟动态分页,或者我们是否必须完全重写 JPA 的关联机制?(例如,创建一个可以管理分页、排序和搜索的 PersistentList 集合类型)。
附言:我最近发现了这部剧!框架在JPA之上使用了一个非常有趣的库:Siena。Siena非常易于使用,并且是JPA / Hibernate之上的一个很好的抽象。但是我找不到如何用它的关联进行分页。
更新:
Play框架具有类似于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是否会认识到这一点,或者会干扰它。