2016-11-09 9 views
1

Hibernateで複数の結合を持つクエリを作成しています。 これで、いくつかのアイテムを使用するすべてのモデルと関連製品を照会する必要があります。Hibernateで複数の結果をまとめて結合する

私はHQLクエリを作成し、同じように見えます:それは戻って私にいくつかの結果が得られます

"FROM Model m inner join fetch m.products p inner join p.itemsInProducts iip inner join iip.item i where i.number = '" + itemID + "' and m.active = '1' and p.active = '1' and iip.active = '1'" 

。しかし、私は同じであるが異なる製品を持つ複数のModelオブジェクトを持っています。すべてのモデルオブジェクトを結合して同じモデルに配置する方法はありますか?

public class Model implements java.io.Serializable { 

    private long id; 
    private ItemClass itemClass; 
    private OrderProcessorCode orderProcessorCode; 
    private String name; 
    private boolean active; 
    private long companyId; 
    @JsonManagedReference 
    private Set products = new HashSet(0); 
    private Set itemsConsumedPerModels = new HashSet(0); 
    private Set itemsInModels = new HashSet(0); 

と製品:

Modelクラスで私の変数がどのように見える

public class Product implements java.io.Serializable { 

    private long id; 
    private ItemClass itemClass; 
    private ItemType itemType; 
    private OrderProcessorCode orderProcessorCode; 
    private String number; 
    private String description; 
    private boolean baseProduct; 
    private boolean otmProduct; 
    private boolean active; 
    private long companyId; 
    private Set itemsInProducts = new HashSet(0); 
    @JsonBackReference(value = "product-models") 
    private Set models = new HashSet(0); 
    private Set optionsPerProductsForProductId = new HashSet(0); 
    private Set optionsPerProductsForOptionId = new HashSet(0); 
    private Set productionOrders = new HashSet(0); 
+0

「WHERE」節を削除するのはどうですか? – Antoniossss

+0

where句は正しいです。モデルオブジェクトをいくつかのforループに手動でマージするようにコードを変更しました。しかし、私はこれが最高の解決策だとは思わない。 – JimmyD

答えて

0

は少し私のクエリとコードを変更しました。これで、照会されたすべての製品が自動的にモデルに追加されます。

Query query = session.createQuery("FROM Model m inner join fetch m.products p inner join p.itemsInProducts iip inner join iip.item i where i.number = '" + itemID +"' and m.active = '1' and p.active = '1' and iip.active = '1'"); 

     ArrayList<Object[]> items = (ArrayList<Object[]>) query.list(); 

     session.close(); 

     for (Object[] objects : items) { 
      Model tempModel = (Model) objects[0]; 

      if(!allmodels.contains(tempModel)) 
      { 
       allmodels.add(tempModel); 
      } 
     } 
関連する問題