2014-07-15 38 views
32

yasadışı girişimi Benorg.hibernate.QueryException: KQUEUE koleksiyonu

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

yürütmek için aşağıdaki hql sorgu çalışıyorum Ama

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

Sınıflarınızın tanımlarını ekleyebilir misiniz? İçlerinde ilişki tanımları var mı? –

cevap

75

billProductSet bir Collection olduğunu gösteriyor. Bu şekilde, product adında bir özniteliği yoktur.

Product, bu Collection öğelerin bir özniteliğidir.

Sen tarafından konu koleksiyonu katılmadan yerine dereferencing çözebilirsiniz

o: billProduct birçok eşleştirme biridir ve bunu yapamazsınız biri BillDetails varlıktan birçok billProduct varlık yoktur

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

Eğer billProductSet @JoinTable olsaydı ve ilişki ManyToMany ise, benim testimde çalışmıyor. – Stony

+0

@Stony It **, '@ JoinTable' ve' ManyToMany' ile çalışır. Şu an koşuyorum. –

0

çünkü Sorguda dereference.you billProduct için billDetails model katılmak ve cluase ile sonuç filtre sonucu.