2011-06-13 50 views
2

请考虑以下实体。休眠例外:非法尝试取消引用集合

public class Product{ 
int id; 
Date effectiveDate; 
Date expiryDate; 
Set<Inventory> productInventories; 
} 

public class Inventory{ 
int invId; 
Date inventoryDate; 
boolean soldOut; 
int availableQuantity; 
Product product; 
} 

上述两个实体分别映射到表Product和Inventory。

现在我必须根据产品实体以及库存实体中的特定条件检索产品。

前提条件是旅行开始日期和旅行结束日期必须适合产品的生效日期和有效日期。产品库存应该有可用数量> 0.

要做到这一点,我该如何编写hql。我可以写像下面

Query query = session.createQuery("from Product As product " + 
          "where product.effectiveDate <= :travelStartDate "+ 
          "AND product.expiryDate >= :travelEndDate " + 
          "AND product.productInventories.availableQuantity >0 "); 

东西当我执行上面的查询,它抛出一个非法尝试取消引用集合例外。

+1

你试图就好像它是一个单一入口访问的集合。如果产品有多个库存料品,其中一个采用availableQuantity 0,另一个采用availableQuantity 1,您是否期望该产品被选中?你究竟想要发生什么? – 2011-06-13 06:08:07

+0

显示您的实体配置。 – 2011-06-13 06:09:54

回答