显示标签提供给定对象的分页功能。Hibernates提供了仅提取每页所需记录的选项。在我的项目中,我们同时使用了这两个概念。
显示广告代码:我需要根据过滤条件提取所有记录并将其存储在会话中。然后这个displaytag将负责所有分页和排序。因此Httpsession拥有很多数据。
hibernate:它仅从数据库中获取请求的对象数,无需为每个请求打开会话。
最好的做事方法是什么?或者如果我们都能达成目标,该怎么做?请帮忙。
如概述所示,您需要使用DisplayTag提取 所有 结果并将其放入会话中。因此,您只在执行一个(可能很昂贵的)查询,但是从内存角度来看,这将无法很好地扩展(如果您需要获取大量结果,或者如果您增加并发用户的数量)。
另一方面,通过Hibernate,您可以使用setFirstResult和setMaxResult提取仅在每个页面上实际显示的记录。这要求对每个页面执行查询,但将扩展为无限数量的结果。
setFirstResult
setMaxResult
就我个人而言,我更喜欢第二种方法,我发现它可以提高内存效率- 尤其是因为大多数用户不会浏览所有页面(所以为什么要加载所有结果)-并使用Hibernate和EJB3中的分页中描述的模式。
如果您决定坚持使用第一种方法,那么我将实现某种最大结果数限制,以避免过于昂贵的查询。如果查询超出限制,请要求用户执行更严格的搜索,即添加条件(反正谁会浏览数千个结果?)。
而且,如果您需要所有结果(例如出于报告目的),那么我认为DisplayTag和全状态会话都不是正确的工具。