2017-02-23 4 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 products変数があります。

また、p.numberだけをソートすると何も起こりません。製品オブジェクトの順序はランダムに順序付けられます。

+0

クエリは正常に見える...あなたは 'model.name'は、右の2列に同じであるとき、' p.number'のみ意味をなすだろうことを知っていますか? – 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); 
関連する問題