我正在尝试按照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)
答案 0 :(得分:108)
billProductSet
是Collection
。
因此,它没有名为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。