如概述所示,您需要使用DisplayTag提取 所有
结果并将其放入会话中。因此,您只在执行一个(可能很昂贵的)查询,但是从内存角度来看,这将无法很好地扩展(如果您需要获取大量结果,或者如果您增加并发用户的数量)。
另一方面,通过Hibernate,您可以使用
setFirstResult和
setMaxResult提取仅在每个页面上实际显示的记录。这要求对每个页面执行查询,但将扩展为无限数量的结果。
就我个人而言,我更喜欢第二种方法,我发现它可以提高内存效率-
尤其是因为大多数用户不会浏览所有页面(所以为什么要加载所有结果)-并使用Hibernate和EJB3中的分页中描述的模式。
如果您决定坚持使用第一种方法,那么我将实现某种最大结果数限制,以避免过于昂贵的查询。如果查询超出限制,请要求用户执行更严格的搜索,即添加条件(反正谁会浏览数千个结果?)。
而且,如果您需要所有结果(例如出于报告目的),那么我认为DisplayTag和全状态会话都不是正确的工具。



