मैं एक प्रश्न पूछना चाहता हूं जहां मैं 2 टेबल में शामिल हो, CriteriaBuilder का उपयोग कर। MySQL में क्वेरी मैं इस प्रकार दिखाई देगा बनाने के लिए कोशिश कर रहा हूँ:एक मानदंड बिल्डर को कस्टम "चालू" स्थिति में कैसे शामिल किया जाए?
SELECT * FROM order
LEFT JOIN item
ON order.id = item.order_id
AND item.type_id = 1
मैं सभी आदेशों को प्राप्त करना चाहते हैं और वे # 1 प्रकार के एक आइटम है, मैं इस आइटम के साथ शामिल करना चाहते हैं। हालांकि, अगर टाइप # 1 की कोई वस्तु नहीं मिली है, तो भी मैं ऑर्डर प्राप्त करना चाहता हूं। मैं यह नहीं समझ सकता कि इसे मानदंडबिल्डर के साथ कैसे बनाया जाए। सभी मुझे पता है कि बनाने के लिए है:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Order> cq = cb.createQuery(Order.class);
Root<Order> order = cq.from(Order.class);
Join<Order, Item> item = order.join(Order_.itemList, JoinType.LEFT);
Join<Item, Type> type = order.join(Item_.type, JoinType.LEFT);
cq.select(order);
cq.where(cb.equal(type.get(Type_.id), 1));
इस क्वेरी को तोड़ दिया है, क्योंकि यह MySQL में कुछ इस तरह का परिणाम:
SELECT * FROM order
LEFT JOIN item
ON order.id = item.order_id
WHERE item.type_id = 1
परिणाम केवल # 1 प्रकार की वस्तुओं के साथ आदेश शामिल होंगे। बिना आदेश दिए गए आदेश। पहले उदाहरण में क्वेरी बनाने के लिए मैं मानदंडबिल्डर का उपयोग कैसे कर सकता हूं?
_ मैं सभी ऑर्डर प्राप्त करना चाहता हूं और यदि उनके पास प्रकार # 1 का कोई आइटम है, तो इस आइटम को परिणाम में शामिल किया जाना चाहिए_ आप किस परिणाम प्रकार चाहते हैं? आदेश? या एक tuple/multiselect? आप सभी आदेशों की तुलना में _more_ क्या चाहते हैं? कृपया – perissf
बताएं क्षमा करें, मैं बहुत स्पष्ट नहीं था। मैंने विवरण को सही किया है। मैं वास्तव में आइटम को मेरे परिणाम के हिस्से के रूप में प्राप्त करने में रूचि नहीं रखता हूं। मैं बस अपने परिणाम में आदेश चाहता हूँ। असल में, मैं किसी विशिष्ट प्रकार की वस्तुओं के आधार पर परिणाम सॉर्ट करना चाहता हूं, जबकि अभी भी उस प्रकार के आइटम के बिना ऑर्डर प्राप्त करना। –
मानदंडबिल्डर के साथ यह संभव है! मेरे उत्तर को देखें – Mitchapp