使用____ToMany映射进行Hibernate分页

时间:2015-10-18 20:16:34

标签: java

我正在手机上写这个,所以原谅蹩脚的代码示例。

我的实体有很多关系:

@JoinTable(name="foo", @JoinColum="...",         @InverseJoinColumn="...")
@ManyToMany
List list = new ArrayList();

我希望以分页的方式检索他们的数据。

我知道setFirstResult和setMaxResults。有没有办法在映射中使用它?在中,我检索对象并获得填充内容的列表,该内容等于单个页面的记录数量,并具有适当的偏移量。

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

PS。如果这是不切实际的,那就说吧。此外,如果是,我仍然可以使用映射将新条目添加到连接表。如果,如果实体是数据库中的持久化实体,但我还没有获取多个列表,我可以添加一些新内容吗?当它保持级联时,它将被添加到连接中表没有清除其他条目?

1 个答案:

答案 0 :(得分:0)

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

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

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

  3. Displaytag是我使用的数据分页框架,因此我可以告诉您适用于大型数据集。它也是此问题的旧解决方案之一,并不是扩展框架的一部分。 http://displaytag.sourceforge.net/11/tut_externalSortAndPage.html

    表分拣机是我遇到的另一个。这个使用JQuery并在一个查询中获取整个数据集,因此严格来说它不符合您的“以分页方式获取数据”标准。 (这可能不适合大型套装)。 http://tablesorter.com/docs/

    本教程可能会有所帮助: http://theopentutorials.com/examples/java-ee/jsp/pagination-in-servlet-and-jsp/

    如果您已经在使用框架,请查看该框架是否已解决分页问题: Spring MVC提供了一个数据分页器 http://blog.fawnanddoug.com/2012/05/pagination-with-spring-mvc-spring-data.html

    GWT提供数据寻呼机: http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/cellview/client/SimplePager.html

    以下引用也可能有所帮助:

    JDBC Pagination 这也指向: http://java.avdiel.com/Tutorials/JDBCPaging.html