web-dev-qa-db-fra.com

org.hibernate.QueryException: tentative illégale de déréférencement de la collection

J'essaie de suivre la requête HQL pour exécuter

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

Mais c'est montrer

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)
54
xrcwrn

billProductSet est un Collection. En tant que tel, il ne possède pas d'attribut nommé product.

Product est un attribut des éléments de ceci Collection.

Vous pouvez résoudre le problème en rejoignant la collection au lieu de déréférencer it:

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

parce que billProduct est un mappage multiple et qu'il existe de nombreuses entités billProduct d'une seule entité BillDetails, vous ne pouvez pas le déréférencer dans query.

0
J.K