【问题标题】:Java Hibernate Query returning duplicate results in batch modeJava Hibernate Query以批处理模式返回重复结果
【发布时间】:2014-06-02 23:56:13
【问题描述】:

我的 DAO 中有以下方法来使用休眠查询数据库(oracle),每个查询批量加载 50 行数据。 batchSize 设置为 50,batchNumber 设置为 1,SortOrder 对象的 isAscending 设置为 true,columnName 等于行中的列之一。

由于某些原因,在前 50 个结果行中,第 35-40 行被跳过,然后我从第二个查询的第 51 行开始得到重复的结果。

注释掉有关 SortOrder 的逻辑可以解决重复的问题,但我不明白为什么我会得到重复的结果.....任何帮助将不胜感激。

public List<Cats> getCatsList(CatQueryCriteria params)
{
   List<Cat> cats= new ArrayList<Cat>();
   Session sess = (Session) em.getDelegate();
   Criteria criteria = sess.createCriteria(Cat.class, "cat");
   //Returns list of catIDs
   List<Long> catIDList = catInfo.returnCatIDs(sess, params);
   //Eliminate duplicates
   criteria.setResultTransformer(DistinctRootEntityResultTransformer.INSTANCE);

   if(catIDList.size() != 0)
   {
      //Add criteria
      criteria.add(Restrictions.in("cat.catID", catIDList));

      //Add in Sort Order
      if(params.getSortOrder() != null)
      {
          for (SortOrder order: params.getSortOrder())
          {
              if(order.isAscending())
              {
                 criteria.addOrder(Order.asc(order.getColumnName()));
              }
              else
              {
                 criteria.addOrder(Order.desc(order.getColumnName()));
              }
          }
      }

     //Batch loading

     if(params.getBatchSize() > 0)
     {
         criteria.setMaxResults(params.getBatchSize());
         if (params.getBatchNumber() > 0)
         {
             criteria.setFirstResult((params.getBatchNumber()) *params.getBatchSize());
         }
      }
     //Execute query
     cats =  criteria.list();
  }
 return cats;
}

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    这是一个复杂的问题。 请检查此问题:

    Hibernate - distinct results with pagination

    对于criteria.setFirstResult(),索引也是从0开始的。所以如果你将索引设置为1,你会在第二页看到结果

    【讨论】:

      猜你喜欢
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多