Estoy tratando siguiente consulta hql para ejecutar

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

Pero muestra

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)
  • Usted puede agregar sus clases de definiciones? Contienen la relación de definiciones en ellos?
InformationsquelleAutor xrcwrn | 2014-07-15

2 Comentarios

  1. 115

    billProductSet es un Collection.
    Como tal, no tiene un atributo denominado product.

    Product es un atributo de los elementos de este Collection.

    Puede solucionar el problema por unirse a la colección en lugar de eliminar la referencia de es:

    SELECT count(*) 
      FROM BillDetails        bd 
      JOIN bd.billProductSet  bps 
     WHERE bd.client.id       = 1
       AND bps.product.id     = 1002
    • No funciona en mi prueba, si billProductSet tiene que ser @JoinTable, y la relación ManyToMany.
    • Se no trabajar con @JoinTable y @ManyToMany. He que la ejecución de ahora.
    • Esta solución funcionó a la perfección para mí.
  2. 0

    porque billProduct es de uno a muchos de asignación y hay muchos billProduct entidad de un BillDetails entidad a la que usted no puede eliminar la referencia en la consulta.usted debe unirse a BillDetails modelo para billProduct y resultado del filtro con el lugar donde clásula.

Dejar respuesta

Please enter your comment!
Please enter your name here