Java Hibernate分页,带有_________;到任意映射

Java Hibernate分页,带有_________;到任意映射,java,Java,我正在手机上写这篇文章,所以请原谅这些蹩脚的代码示例 我有很多关系的实体: @JoinTable(name="foo", @JoinColum="...", @InverseJoinColumn="...") @ManyToMany List list = new ArrayList(); 我希望以分页的方式检索他们的数据 我知道setFirstResult和setMaxResults。有没有一种方法可以将其用于映射?与中一样,我检索对象并在列表中填充与单个页面的记录数量相等的

我正在手机上写这篇文章,所以请原谅这些蹩脚的代码示例

我有很多关系的实体:

@JoinTable(name="foo", @JoinColum="...",         @InverseJoinColumn="...")
@ManyToMany
List list = new ArrayList();
我希望以分页的方式检索他们的数据

我知道setFirstResult和setMaxResults。有没有一种方法可以将其用于映射?与中一样,我检索对象并在列表中填充与单个页面的记录数量相等的内容,以及适当的偏移量

我想我只是不清楚最好的方法。我可以手动使用hibernate标准来实现这个效果,但我觉得它缺少API。我有这个映射,我想看看是否有一种方法可以以分页的方式使用它


如果这是不切实际的,就说。此外,如果是,我仍然可以使用映射向联接表添加新条目。如中所示,如果该实体是数据库中的一个持久化实体,但我尚未获取多个列表,我是否可以向其添加一些新的内容,并且当它以级联方式持久化时,它将被添加到联接表中,而不清除其他项?

作为查询一部分的实体之间的关系类型并不重要。有几种方法可以解决这个问题

如果您的数据库在查询中支持LIMIT关键字,那么您可以使用它来获取数据集,假设您对数据进行排序。请注意,如果您的数据在用户在页面之间导航时发生更改,您可能会看到一些重复或丢失一些记录。如果您的数据库更改为没有LIMIT关键字的数据库,您将不得不重写

如果需要在原始查询点冻结数据,则需要使用第三方框架或编写自己的框架来获取查询的id列表,然后拆分该列表并按id获取子集以进行分页。这是更可靠的,可用于任何数据库

Displaytag是我使用过的一个数据分页框架,因此我可以告诉您,它适用于大型数据集。它也是解决此问题的较老解决方案之一,并且不是扩展框架的一部分。

桌上分拣机是我遇到的另一个。这一个使用JQuery并在一个查询中获取整个数据集,因此严格来说,它不符合您以分页方式获取数据的条件。这可能不适用于大型集合。

本教程可能会有帮助:

如果您已经在使用框架,请查看该框架是否已解决分页问题: SpringMVC提供了一个数据寻呼机

GWT提供了一个数据寻呼机:

以下参考资料也可能有帮助:

它还指出: