2012-04-18 17 views
16

मैं जेपीए जानने के लिए शुरू कर रहा हूँ, और निम्नलिखित देशी एसक्यूएल कि मैं एसक्यूएल सर्वर में परीक्षण के आधार पर जेपीए क्वेरी के साथ एक उदाहरण को लागू किया है,:वाम बाहरी के साथ एक जेपीए क्वेरी बनाने के लिए कैसे शामिल हों

SELECT f.StudentID, f.Name, f.Age, f.Class1, f.Class2 
FROM Student f 
    LEFT OUTER JOIN ClassTbl s ON s.ClassID = f.Class1 OR s.ClassID = f.Class2 
WHERE s.ClassName = 'abc' 

से ऊपर एसक्यूएल मैं निम्नलिखित JPQL क्वेरी का निर्माण किया है:

SELECT f FROM Student f LEFT JOIN f.Class1 s; 

आप देख सकते हैं, मैं अभी भी अपने मूल क्वेरी से हालत OR s.ClassID = f.Class2 की कमी है। मेरा सवाल है, मैं इसे अपने जेपीक्यूएल में कैसे रख सकता हूं?

+0

संभावित डुप्लिकेट [बाएं बाहरी जॉइन के साथ जेपीए क्वेरी कैसे बनाएं] (http://stackoverflow.com/questions/4750371/how-to-make-a-jpa-query-with-left-outer-join) – Perception

उत्तर

27

इसे लिखें;

SELECT f from Student f LEFT JOIN f.classTbls s WHERE s.ClassName = 'abc' 

क्योंकि आपके छात्र इकाई ClassTbl संस्था के साथ कई रिश्ते के लिए एक है।

3

आम तौर पर ओएन क्लॉज मैपिंग के कॉलम कॉलम से आता है, लेकिन जेपीए 2.1 ड्राफ्ट एक नए ऑन क्लॉज में अतिरिक्त शर्तों के लिए अनुमति देता है।

देखें,

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#ON

+0

उम्मीद है कि यह जल्द ही परीक्षण के लिए आता है। धन्यवादएसएस – Bryan

+0

ON पहले से ही EclipseLink 2.4 में समर्थित है रात को – James

10

आप संस्थाओं ए और उन दोनों के बीच कोई संबंध के बिना बी है और वहाँ सख्ती से 0 या 1 प्रत्येक एक के लिए बी है, तो आप कर सकता है:

select a, (select b from B b where b.joinProperty = a.joinProperty) from A a 

यह आपको एक परिणाम के लिए ऑब्जेक्ट [] {ए, बी} या कई परिणामों के लिए सूची < ऑब्जेक्ट [] {ए, बी} > देगा।

+0

बनाता है यह एकमात्र उत्तर है जो असंबंधित इकाइयों के साथ काम करता है – 11thdimension

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