2017-02-23 1 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();  

모델 엔티티 제품이 포함 된 세트 제품 변수가 있습니다.

또한 p.number에서만 정렬 할 때 아무 일도 발생하지 않습니다. 제품 오브젝트의 순서는 무작위로 정렬됩니다.

+0

쿼리가 정상적으로 처리됩니다 ...'p.number'는'model.name'이 두 행에 대해 동일 할 때만 의미가 있다는 것을 알고 있습니까? – Eugene

+0

model.name은 다른 제품에 대해 동일한 값일 수 있습니다. – JimmyD

답변

0

SQL 대신 Java 코머레이터를 사용하여 세트를 정렬했습니다.

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);