【问题标题】:Client Side sorting + Hibernate Paging?客户端排序+休眠分页?
【发布时间】:2010-12-27 13:44:34
【问题描述】:

我将 GWT 用于 UI,Hibernate/Spring 用于业务层。以下 GWT 小部件用于显示记录。(http://collectionofdemos.appspot.com/demo/com.google.gwt.gen2.demo.scrolltable.PagingScrollTableDemo/PagingScrollTableDemo.html)。我假设排序是在客户端完成的。

我没有检索整个结果集,因为它很大。 我用

principals = getHibernateTemplate().findByCriteria(criteria,
                    fromIndex, numOfRecords);

检索数据。Hibernate 层没有排序标准。

这种方法没有给出正确的行为,因为它只对客户端中的当前数据集进行排序。

这个问题的最佳解决方案是什么?

注意:我可以使用 UI 框架获取主排序列和其他排序列。 我可以在休眠层中使用primary-sort-column对结果进行排序吗?

【问题讨论】:

    标签: java hibernate gwt pagination


    【解决方案1】:

    如果您在 GUI 中对部分结果和服务器上的页面进行排序,用户会感到困惑。

    由于数据集很大,将整个数据集发送给用户并同时进行分页和排序是不行的。

    这只在服务器上留下排序和分页。您可以使用 Criteria.addOrder() 在休眠中进行排序。见this tutorial

    【讨论】:

      【解决方案2】:

      您需要在服务器上进行排序。

      那么你可以:

      • 将完整的结果集发送到客户端并在客户端处理分页。问题是结果集可能很大,从 db 中检索并发送到客户端。

      • 在服务器端处理分页。客户端和服务器一次只从数据库请求一页。然后的问题是,每次您向数据库询问特定页面时,您将一次又一次地订购相同的数据以提取第 1 页、第 2 页等。这可能是大型数据库的问题。

      • 在两者之间进行权衡(对于大型数据库):

        • 设置一个限制,比如 300 项
        • 服务器根据order by向db查询前301项
        • 服务器将结果集(最多 301 项)保存在缓存中
        • 客户端逐页请求服务器
        • 服务器使用缓存处理分页
        • 如果有 301 项,客户端显示“命中列表包含超过 300 项。已被截断”。

      注1:通常,客户不关心他是否不能到达最后一页。您可以改进解决方案以首先计算总行数(那时不需要排序),以便您可以向用户显示更好的消息,例如“结果包含 2023 个元素,只能查看前 300 个”。

      注意2:如果您在数据库中逐页请求数据而不使用任何顺序标准,大多数数据库(至少Oracle)不保证任何顺序。因此,如果您向数据库发出两次请求,您可能在第 1 页和第 2 页中拥有相同的项目。如果多个项目具有用于订购的相同值(例如相同日期),则会发生相同的问题。 db 不保证具有相同值的元素之间的任何排序。如果是这种情况,我建议使用 PK 作为最后一个排序标准(例如ORDER BY date, PK),以便以一致的方式完成分页。

      注意 3:我说的是客户端和服务器,但您可以根据自己的具体情况调整这个想法。

      【讨论】:

        【解决方案3】:
        1. 总是有一个排序列。默认情况下,它可以是“名称”或“id”
        2. 使用服务器端分页。 IE。传递当前页面索引并获取适当的数据子集。
        3. 在提取条件/查询中使用排序列。如果客户端没有选择,则使用默认值。

        因此,您将获得所需的行为而无需权衡取舍。

        【讨论】:

        • 但是每次请求页面时,数据库都会一遍又一遍地对相同的数据进行排序,不是吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 2011-03-12
        • 2011-07-25
        相关资源
        最近更新 更多