org.hibernate.QueryException:非法尝试取消引用集合

时间:2014-07-15 05:53:44

标签: hibernate hql jpa-2.0 dereference jpa-2.1

我正在尝试按照hql查询执行

SELECT count(*) 
  FROM BillDetails as bd
 WHERE bd.billProductSet.product.id = 1002
   AND bd.client.id                 = 1

但它正在显示

org.hibernate.QueryException: illegal attempt to dereference collection 
[billdetail0_.bill_no.billProductSet] with element property reference [product] 
[select count(*) from iland.hbm.BillDetails as bd where bd.billProductSet.product.id=1001 and bd.client.id=1]
    at org.hibernate.hql.ast.tree.DotNode$1.buildIllegalCollectionDereferenceException(DotNode.java:68)
    at org.hibernate.hql.ast.tree.DotNode.checkLhsIsNotCollection(DotNode.java:558)

2 个答案:

答案 0 :(得分:108)

billProductSetCollection。 因此,它没有名为product的属性。

Product是此Collection的元素的属性

您可以通过加入集合而非解除引用来解决问题:

SELECT count(*) 
  FROM BillDetails        bd 
  JOIN bd.billProductSet  bps 
 WHERE bd.client.id       = 1
   AND bps.product.id     = 1002

答案 1 :(得分:0)

因为billProduct是一对多映射,并且在一个BillDetails实体中有许多billProduct实体,你不能在查询中取消引用它。你必须将BillDetails模型加入billProduct并过滤结果与cluase。