के माध्यम से प्राप्त करें मेरे पास एक मूल इकाई और बाल संस्थाओं के बीच एक से कई मैपिंग हैं। अब मुझे माता-पिता की सूची के लिए प्रत्येक माता-पिता से जुड़े बच्चों की संख्या की आवश्यकता है। मैं इसे एचक्यूएल के साथ करने की कोशिश कर रहा हूं लेकिन मुझे यकीन नहीं है कि मैं वहां माता-पिता की सूची कैसे प्राप्त कर सकता हूं। साथ ही, मुझे नहीं पता कि मैं इकाई को कैसे वापस कर सकता हूं न केवल इसकी आईडी। मेरे वर्तमान HQL क्वेरी है:बच्चों को HQL
select new map(parent.id as parentId, count(*) as childCount)
from Parent parent left join parent.children children
group by parent.id
लेकिन यह केवल आईडी वापस आती है और विशिष्ट माता-पिता पर फ़िल्टर नहीं करती।
संपादित पास्कल जवाब के आधार पर मैं
select new map(parent as parent, count(elements(parent.children)) as childCount)
from Parent parent
group by parent
काम करता है यही कारण है कि करने के लिए क्वेरी को संशोधित किया है, लेकिन निषेधात्मक धीमी है: के बजाय 30 सेकंड में एक ही डेटाबेस पर 400 एमएस।
दरअसल, कि बुरी तरह धीमी है:
मामले में किसी और को एक विशेष रूप से माता पिता के लिए बच्चों की संख्या को खोजने के लिए की जरूरत है, तो आप कुछ इस तरह इस्तेमाल कर सकते हैं। वास्तव में स्वीकार्य रूप से स्वीकार्य ... –
इंडेक्स (गति पर जोर दे सकता है) गति के साथ मदद कर सकता है, लेकिन दूसरा विकल्प है कि यदि आप कर सकते हैं तो एचक्यूएल क्वेरी को भागों में तोड़ना है - मुझे कभी-कभी मदद मिलती है। या आप प्रत्येक मूल तत्व के लिए अलग-अलग प्रश्न कर सकते हैं, और मानचित्र को स्वयं बना सकते हैं। एक अच्छा डेटाबेस प्रोफाइलर संभवतः अन्वेषण में मदद करेगा। – aperkins
मैंने जो समाधान चुना है वह सबसे पहले डेटाबेस से सभी माता-पिता को पुनर्प्राप्त करना है, फिर क्वेरी को चलाएं जो मुझे मूल आईडी और गणना देता है और फिर जावा में दो को विलय करता है। मुझे वैसे भी सभी माता-पिता मिलना है, और उस सूची को बाल गणना के साथ विलय करना एक सेकंड से भी कम समय लेता है, जो इस स्थिति में ठीक है। –