【问题标题】:ScrollableResults size gives repeated valueScrollableResults 大小给出重复值
【发布时间】:2013-07-26 07:04:01
【问题描述】:

我正在使用 hibernate 和 spring 开发应用程序。我正在尝试使用 ScrollableResults 获取查询获得的结果计数,但由于查询包含大量连接(内部连接),结果包含重复多次的 id。当我使用 ScrollableResults 来了解从数据库返回的唯一行(或唯一 ID)的总数时,这会给 ScrollableResults 带来问题。请帮忙。部分代码如下:

        StringBuffer queryBuf = new StringBuffer("Some SQL query with lots of Joins");

        Query query = getSession().createSQLQuery(queryBuf.toString());

        query.setReadOnly(true);


        ScrollableResults results = query.scroll();
        if (results.isLast() == false)
            results.last();
        int total = results.getRowNumber() + 1;

        logger.debug(">>>>>>TOTAL COUNT<<<<<< = {}", total);

它给出的总计数为 1440,但数据库中的实际唯一行为 504。 提前致谢。

【问题讨论】:

    标签: sql spring hibernate count scrollableresults


    【解决方案1】:

    getRowNumber() 给出当前行的编号。 致电last(),然后getRowNumber()+1 将给出结果总数。

    【讨论】:

      【解决方案2】:

      很遗憾,getRowNumber 没有给您结果的大小或数量,而是结果中的当前位置。 ScrollableResults 不提供直接获取结果数量的方法。

      我指的是ScrollableResults Hibernate 5.4版。

      作为一种解决方法,您可以尝试

      Long l_resultsCount = 0L;
      while(results.next()) {
          l_resultsCount++;
      }
      

      【讨论】:

        【解决方案3】:

        你可以试试

        Integer count= ((Long)query.uniqueResult()).intValue();
        

        【讨论】:

        • 当然,我会试试这个。谢谢。
        • 我也试过了,但是需要很长时间。在我看来, uniqueResult() 遍历所有记录,在这种情况下,我从使用 ScrollableResults 中一无所获......
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-13
        • 2013-11-11
        相关资源
        最近更新 更多