2012-03-30 12 views
9

में विशिष्ट फ़ील्ड पर विशिष्ट आइटमों की गणना कैसे करें: यह पता चला है कि जेपीए इसे व्यक्त नहीं कर सकता है। समाधान एसक्यूएल में फिर से लिखना था।QueryDSL

मैं रिपोर्टिंग के लिए जेपीए डेटा सेट पर एक समग्र क्वेरी करने के लिए QueryDSL का उपयोग कर रहा हूं। मुझे रिपोर्ट डेटा निकालने में कोई समस्या नहीं है। उदाहरण के लिए:

... 
query = query.groupBy(QVehicle.vehicle.make, QVehicle.vehicle.model); 
return query.listDistinct(new QMakeModelReportData(
      QVehicle.vehicle.make, QVehicle.vehicle.model, 
      QVehicle.vehicle.make.count())); 

यह मेरा डीटीओ वस्तु, जिनमें से प्रत्येक एक वाहन कर, वाहन मॉडल, और कहा कि मेकअप मॉडल के वाहनों की संख्या शामिल की एक सूची तैयार करता है। इस तरह:

Ford, Focus, 14 
    Ford, Mondeo, 4 
    Vauxhall, Astra, 4 

लेकिन मैं वास्तव में क्वेरी करने से पहले पंक्तियों की संख्या को गिनने के लिए वाक्यविन्यास का काम नहीं कर सकता। वाक्य रचना मैं कल्पना, इस तरह है जो मौजूद नहीं है:

return query.countDistinct(QVehicle.vehicle.make, QVehicle.vehicle.model); 

मैं एक नहीं बल्कि अक्षम विकल्प के साथ समाप्त हो गया है:

return query 
    .listDistinct(QVehicle.vehicle.make, QVehicle.vehicle.model) 
    .size(); 

क्या बेहतर है?

+0

कर सकते हैं आप को व्यक्त करने के लिए आप क्या JPQL के माध्यम से सीधे की जरूरत में सक्षम हैं? –

+0

यही वह है जो मैं सोमवार की सुबह कोशिश कर रहा हूं। मैं जेपीए के नीचे जाने और एसक्यूएल में क्वेरी करने पर भी विचार कर रहा हूं, जहां इसे व्यक्त करना बहुत आसान है। –

+0

मुझे लगता है कि मुझे इस एसक्यूएल के समतुल्य तक पहुंचने की ज़रूरत है, शायद एक सबक्वायरी का उपयोग करें: 'योग (v) द्वारा v.make, v.model द्वारा चयन गिनती (*) चुनें (' I ' मुझे यह सुनिश्चित नहीं है (या यहां तक ​​कि सरल 'चुनिंदा गिनती (विशिष्ट v.make || v.model) वाहन v; ') से जेपीक्यूएल में व्यक्त किया जा सकता है। –

उत्तर

2

यह एक क्वेरीरीएसएल सीमा नहीं है, लेकिन एक जेपीए सीमा है। समाधान एसक्यूएल में फिर से लिखना था।

1

आप query.select(q.field.countDistinct())

+2

मैं एकाधिक फ़ील्ड पर अलग-अलग गिनने का प्रयास कर रहा हूं, न कि एक फ़ील्ड। जेपीए केवल एक ही फ़ील्ड पर अलग-अलग गिनती करने के लिए सीमित है: http://stackoverflow.com/a/37784831/184998 –

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