2016-11-09 65 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); 
      } 
     }