4

显示标签提供给定对象的分页功能。Hibernates 提供了仅获取每页所需记录的选项。在我的项目中,我们同时使用了这两个概念。

显示标签:我需要根据过滤条件获取所有记录并将其存储在 Session 中。然后这个 displaytag 会处理所有的分页和排序。所以 Httpsession 保存了大量的数据。

Hibernate:它只从数据库中获取请求的对象数。需要为每个请求打开会话。

最好的方法是什么?或者如果我们可以同时实现这两件事怎么做?请帮助解决这个问题。

4

2 回答 2

4

正如您所概述的,您需要使用 DisplayTag 获取所有结果并将它们放入会话中。因此,您只执行一个(可能很昂贵)查询,但从内存的角度来看,这不会很好地扩展(如果您需要获取大量结果或增加并发用户的数量)。

另一方面,使用 Hibernate,您可以使用setFirstResultsetMaxResult仅获取每个页面上实际显示的记录。这需要对每个页面执行查询,但会针对无限数量的结果进行扩展。

就个人而言,我更喜欢第二种方法,我发现它更节省内存 - 特别是因为大多数用户不会浏览所有页面(所以为什么要加载所有结果) - 并使用Pagination in Hibernate and EJB3 中描述的模式。

如果您决定坚持第一种方法,我会实施某种最大结果数限制以避免过于昂贵的查询。如果查询超出限制,要求用户执行更严格的搜索,即添加条件(谁将浏览数千个结果?)。

如果您需要所有结果,例如用于报告目的,那么在我看来,DisplayTag 和 statefull 会话都不是正确的工具。

于 2010-06-29T21:07:14.183 回答
3

您实际上不需要获取所有结果,您可以使用名为external pagination的 Displaytag 功能,您可以在其中告诉 Displaytag 您正在处理 Displaytag 外部的分页。

有关详细信息,请参阅Displaytag 文档中的外部分页和排序

此外,这个 stackoverflow 问题有更多信息和示例代码。

于 2011-04-14T14:32:34.477 回答