Vis*_*hao 16 java hibernate jpa siena playframework
假设我有一个Post实体和一个Comment实体以及一对多的关系:
@Entity class Post {
...
@OneToMany
List<Comment> comments;
...
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这样的分页:
Post post = //Find the post.
return post.getComments().fetch(100, 10); // Find the 11th page (page size 10);
Run Code Online (Sandbox Code Playgroud)
是否可以在JPA之上使用@OneToMany集合模拟动态分页,或者我们是否必须完全重写JPA的关联机制?(例如,创建一个可以管理分页,排序和搜索的PersistentList集合类型).
PS:我最近发现了Play!框架在JPA:Siena之上使用了一个非常有趣的库.Siena非常易于使用,并且在JPA/Hibernate之上是一个很好的抽象.但我找不到如何使用其关联进行分页.
更新:
Play框架具有类似于Django的查询语法:
Post.findAll().from(100).fetch(10); // paging
Run Code Online (Sandbox Code Playgroud)
哪里
Post.findAll()
Run Code Online (Sandbox Code Playgroud)
将返回一个JPAQuery对象,一个Play中的自定义查询类型.
但是有关联的集合,例如:
Post.comments
Run Code Online (Sandbox Code Playgroud)
将只返回一个List,它不支持分页或其他查询.
我想知道如何扩展它,所以
Post.comments
Run Code Online (Sandbox Code Playgroud)
还会返回一个JPAQuery对象或类似对象,然后就可以查询"查询"集合:
Post.comments.from(100).fetch(10);
Run Code Online (Sandbox Code Playgroud)
或插入新的评论而不实际获取任何评论:
Post.comments.add(new Comment(...));
Run Code Online (Sandbox Code Playgroud)
在我的第一个想法,我们可以创建一个List的子类,然后Post类将成为:
@Entity class Post {
...
@OneToMany
QueryList<Comment> comments;
...
}
Run Code Online (Sandbox Code Playgroud)
而且QueryList将具有fetch(),from()方法,间接于JPAQuery.
但我不知道Hibernate/JPA是否会识别它,或者干扰它.
是否可以在JPA(...)之上使用@OneToMany集合模拟动态分页
不支持.标准方法是使用JPQL查询来检索给定帖子的注释以及使用Query#setFirstResult(int)和Query#setMaxResults(int).
在我的第一个想法,我们可以创建一个List的子类,(...).但我不知道Hibernate/JPA是否会识别它,或者干扰它.
显然,如果没有大量补丁来彻底改变默认行为.
| 归档时间: |
|
| 查看次数: |
5746 次 |
| 最近记录: |