当前位置: 首页 > 面试题库 >

如何使用@OneToMany集合进行分页

田成仁
2023-03-14
问题内容

假设我有一个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集合类型,该类型可以管理分页,排序和搜索)。

PS:我最近找到了Play!框架在JPA上使用了一个非常有趣的库:Siena。Siena非常易于使用,并且是JPA /
Hibernate的良好抽象。但是我找不到如何对其关联进行分页。

更新:

Play框架的查询语法类似于Django:

Post.findAll().from(100).fetch(10);  // paging

哪里

Post.findAll()

将返回JPAQuery对象,这是Play中的自定义查询类型。

但是具有相关的集合,例如:

Post.comments

只会返回一个不支持分页或其他查询的列表。

我想知道如何扩展它,以便

Post.comments

还将返回一个JPAQuery对象或类似的对象,然后您可以在“查询”集合上进行查询:

Post.comments.from(100).fetch(10);

或插入一个新的Comment而不实际获取任何评论:

Post.comments.add(new Comment(...));

我的第一个想法是,我们可以创建List的子类,然后Post类将变为:

@Entity class Post {
    ...
    @OneToMany
    QueryList<Comment> comments;
    ...
}

和QueryList将具有间接访问JPAQuery的fetch(),from()方法。

但是我不知道Hibernate / JPA是否会识别或干扰它。


问题答案:

是否可以在JPA(…)上使用@OneToMany集合来模拟动态分页?

不支持。标准方法是使用JPQL查询来检索给定帖子的评论,并使用Query#setFirstResult(int)Query#setMaxResults(int)

我的第一个想法是,我们可以创建List(…)的子类。但是我不知道Hibernate / JPA是否会识别或干扰它。

显然,如果没有一个 沉重的 补丁来彻底改变默认行为,那将是不可能的。



 类似资料:
  • 分支合并分为两种情况,一种是本地分支合并,一种是远程分支合并到本地分支,下面,分别用GIF动画演示 本地合并分支: 远程分支合并

  • 我有以下方法,该方法对我的集合执行提取,然后调用render函数来显示结果。这一切都很好,每次用户到达页面底部时都会触发。 然而,在此获取期间,我想预取下一批项目,以便用户体验更好。我不确定如何实现这一点。我想过做另一个(检查我的代码),然后将结果分配给一个变量,但我不确定这是否是不好的做法。 然后我可以参考这个变量,看看下次用户到达页面底部时它是否有任何内容? 有没有人做过类似的事情,可以给我一

  • 问题内容: 我想使用itext生成pdf。我会在某些时候添加内容以进行分页。我需要插入几个单独的conenidos依赖源,所以我要求用户在单独的页面上插入。有任何想法吗??? 问题答案: 调用告诉iText将后续对象放置在新页面上。仅当您放置下一个对象时,才会真正创建新页面。另外,仅在当前页面不为空白时创建一个新页面;否则,仅创建一个新页面。否则,它将被忽略;您可以用来克服这一点。 请参见下面的链

  • 我想用iText生成一个pdf。我会在某个时候添加内容以进行分页。我需要插入几个单独的conenidos依赖源,所以我要求用户在单独的页面上这样做。有什么想法吗???

  • 问题内容: 我通过使用本教程学习Spring,Hibernate,Maven:Chad Lung:一个使用Netbeans 7,JUnit,Maven,HSQLDB,Spring和Hibernate的项目 。可以,但是我需要建立一对多关系(一个雇员有很多任务)。我已经尝试了许多示例,但仍然不知道如何使代码正常工作: Employee.java: Task.java: db-config.xml:

  • 问题内容: 我正在尝试使用JPA建立双向关系。我了解这是应用程序负责维护双方关系的责任。 例如,一个图书馆有多本书。在图书馆实体中,我有: 图书实体为: 不幸的是,OneToMany端的集合为空。因此,例如,对setLibrary()的调用失败,因为this.library.getBooks()。contains(this)导致NullPointerException。 这是正常行为吗?我应该自己