2014-07-15 5 views
32

करने के लिए अवैध प्रयास मैंorg.hibernate.QueryException: भिन्नता संग्रह

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

निष्पादित करने के लिए निम्नलिखित HQL क्वेरी कोशिश कर रहा हूँ लेकिन यह दिखा रहा है

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

क्या आप अपनी कक्षाओं की परिभाषाओं को जोड़ सकते हैं? क्या उनमें उनमें रिश्ते की परिभाषाएं हैं? –

उत्तर

75

billProductSet एक Collection है। इस प्रकार, इसमें product नामक विशेषता नहीं है।

Product इस Collection के तत्वों की विशेषता है।

आप द्वारा इस मुद्दे को में शामिल होने के संग्रह बजाय अपसंदर्भन ठीक कर सकते हैं यह:

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

यह मेरे परीक्षण में काम नहीं करता है, अगर बिल प्रोडक्टसेट प्राप्त हो गया है तो @ जॉइनटेबल हो, और रिलेशनशिप ManyToMany है। – Stony

+0

@ स्टॉटी यह ** ** ** @ जॉइनटेबल 'और' @ ManyToMany' के साथ काम करता है। मेरे पास अभी चल रहा है। –

0

क्योंकि billProduct कई मानचित्रण के लिए एक है और वहाँ एक BillDetails इकाई आप नहीं कर सकते से कई billProduct इकाई है इसे क्वेरी में डिफरेंस करें। आपको बिल डिस्प्ले मॉडल में बिल प्रोडक्ट में शामिल होना चाहिए और क्लूज़ के साथ परिणाम फ़िल्टर करना होगा।

संबंधित मुद्दे