我正在手机上写这个,所以原谅蹩脚的代码示例。
我的实体有很多关系:
@JoinTable(name="foo", @JoinColum="...", @InverseJoinColumn="...")
@ManyToMany
List list = new ArrayList();
我希望以分页的方式检索他们的数据。
我知道setFirstResult和setMaxResults。有没有办法在映射中使用它?在中,我检索对象并获得填充内容的列表,该内容等于单个页面的记录数量,并具有适当的偏移量。
我想我还不清楚最好的方法。我可以手动使用hibernate标准来产生效果,但我觉得它缺少API。我有这个映射,我想知道是否有一种以分页方式使用它的方法。
PS。如果这是不切实际的,那就说吧。此外,如果是,我仍然可以使用映射将新条目添加到连接表。如果,如果实体是数据库中的持久化实体,但我还没有获取多个列表,我可以添加一些新内容吗?当它保持级联时,它将被添加到连接中表没有清除其他条目?
答案 0 :(得分:0)
作为查询一部分的实体之间关系的类型并不重要。有几种方法可以解决这个问题。
如果您的数据库在其查询中支持LIMIT关键字,则可以使用它来获取数据集,假设您对数据进行排序。请注意,如果您的数据在用户在页面之间导航时发生更改,您可能会看到一些重复或遗漏某些记录。如果您的数据库更改为没有LIMIT关键字的数据库,您将不得不重写。
如果您需要在原始查询点冻结数据,则需要使用第三方框架或编写自己的框架来获取查询的ID列表,然后拆分该列表并按ID获取在分页的子集中。这可以更加可靠地适用于任何数据库。
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