2017-02-23 82 views
0

我写了一个查询,查找模型及其链接的产品。现在当我使用“order by model.name,p.number”语句对数据进行排序时,模型将被正确排序。但是对产品的排序不会发生。我怎样才能解决这个问题:模型将被排序,并且模型中的产品也被排序。对hql中的多列进行排序

Session session = sharedData.getFactory().openSession(); 

     Query query = session.createQuery("select distinct model FROM Model model join fetch model.products p " 
       + "join p.itemsInProducts iip " + "join iip.company iipc " + "join iip.item i " 
       + "join model.company modelc " + "Join p.company pc " + "where " 
       + "model.active = '1' and modelc.companyId = '" + companyId +"' " + "and p.active = '1' and pc.companyId = '" + companyId +"' " 
       + "and i.id = '"+ itemID + "' " + "and iip.active = '1' and iipc.companyId = '" + companyId +"' order by model.name, p.number"); 

     List<Model> models = query.list(); 

     session.close();  

模型实体具有包含产品的Set产品变量。

此外,当仅在p.number上排序时,没有任何反应。产品对象的顺序是随机排列的。

+0

该查询看起来很好......你知道'p.number'只有当'model.name'对两行相同时才有意义吗? – Eugene

+0

model.name对于不同的产品可以是相同的值。 – JimmyD

回答

0

对不在sql中的集合进行排序,但使用Java comarator进行排序。

TreeSet<Product> orderList = new TreeSet<>(new Comparator<Product>() { 

      @Override 
      public int compare(Product prod1, Product prod2) { 
       return prod1.getNumber().compareTo(prod2.getNumber()); 
      } 
     }); 

     orderList.addAll(result);