Подтвердить что ты не робот

Org.hibernate.QueryException: незаконная попытка сбора разыменования

Я пытаюсь выполнить запрос 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)
4b9b3361

Ответ 1

billProductSet является Collection. Таким образом, он не имеет атрибута с именем product.

product является атрибутом элементов этого Collection.

Исправить проблему можно с помощью присоединения к коллекции вместо разыменования:

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

Ответ 2

потому что billProduct - это сопоставление от одного до многих, и существует много объектов billProduct из одного объекта BillDetails, который вы не можете разыменовать в запросе. Вы должны присоединиться к модели BillDetails для выставления счета и результата фильтрации с помощью cluase.