2016-11-09 71 views
1

我正在用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對象,但是使用了不同的產品。有什麼方法可以將所有模型對象合併到同一個模型中?

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

而且產品:

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