假设我有一个Post实体和一个Comment实体和一对多的关系:
@Entity class Post {
...
@OneToMany
List comments;
...
}
我如何实现这样的分页:
Post post = //Find the post.
return post.getComments().fetch(100, 10); // Find the 11th page (page size 10);
是否可以在JPA之上模拟@OneToMany集合的动态分页,
还是要重写JPA的关联机制? (例如创建可以管理分页,排序和搜索的PersistentList集合类型).
P.S .:我最近发现了Play!框架在JPA的顶部使用了非常有趣的lib:锡耶纳.锡耶纳非常容易使用,是JPA / Hibernate之上的一个很好的抽象.但是我找不到如何使用它的关联进行分页.
更新:
Play框架有一个类似于Django的查询语法:
Post.findAll().from(100).fetch(10); // paging
哪里
Post.findAll()
将在Play中返回一个JPAQuery对象,一个自定义的查询类型.
但是关联集合,例如:
Post.comments
将只返回一个列表,它不支持分页或其他查询.
我想知道如何扩展它,所以
Post.comments
也会返回一个JPAQuery对象或类似的,那么可以在“查询”集合上查询:
Post.comments.from(100).fetch(10);
或插入新的注释而不实际获取任何注释:
Post.comments.add(new Comment(...));
在我的第一个想法中,我们可以创建一个List的子类,然后Post类将成为:
@Entity class Post {
...
@OneToMany
QueryList comments;
...
}
而QueryList将具有间接到JPAQuery的fetch(),from()方法.
但是我不知道Hibernate / JPA是否会识别这个,或是干扰它.