程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用@OneToMany集合进行分页大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

开发过程中遇到如何使用@OneToMany集合进行分页的问题如何解决?下面主要结合日常开发的经验,给出你关于如何使用@OneToMany集合进行分页的解决方法建议,希望对你解决如何使用@OneToMany集合进行分页有所启发或帮助;

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

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

解决方法

假设我有一个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是否会识别或干扰它。

大佬总结

以上是大佬教程为你收集整理的如何使用@OneToMany集合进行分页全部内容,希望文章能够帮你解决如何使用@OneToMany集合进行分页所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: