一尘不染

DisplayTag分页与休眠分页

hibernate

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

显示广告代码:我需要根据过滤条件提取所有记录并将其存储在会话中。然后这个displaytag将负责所有分页和排序。因此Httpsession拥有很多数据。

hibernate:它仅从数据库中获取请求的对象数,无需为每个请求打开会话。

最好的做事方法是什么?或者如果我们都能达成目标,该怎么做?请帮忙。


阅读 295

收藏
2020-06-20

共1个答案

一尘不染

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

另一方面,通过Hibernate,您可以使用setFirstResultsetMaxResult提取仅在每个页面上实际显示的记录。这要求对每个页面执行查询,但将扩展为无限数量的结果。

就我个人而言,我更喜欢第二种方法,我发现它可以提高内存效率-
尤其是因为大多数用户不会浏览所有页面(所以为什么要加载所有结果)-并使用Hibernate和EJB3中的分页中描述的模式。

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

而且,如果您需要所有结果(例如出于报告目的),那么我认为DisplayTag和全状态会话都不是正确的工具。

2020-06-20