2010-08-04 11 views
7
खोजने के लिए शामिल होने के

मुझे यकीन है कि मैं बेवकूफ जा रहा हूँ, लेकिन मैं इस एक बाहर निकालने नहीं कर पा रहे हूँ ...जेपीए बाईं अप्रयुक्त प्रविष्टियों

मैं दो तालिकाओं है:

विभाग (था, नाम) कर्मचारी (ईआईडी, पहला, आखिरी, किया गया)

उनके पास संबंधित संस्थाएं हैं जेपीए प्रबंधित विभाग विभाग और कर्मचारी। कर्मचारी के पास एक डिपार्टमेंट फील्ड है, विभाग कर्मचारी सूची को बनाए रखता नहीं है। मैं जो करना चाहता हूं वह उन सभी विभागों को ढूंढता है जिनमें कर्मचारी नहीं हैं। सादे पुराने एसक्यूएल का उपयोग करना बाएं से जुड़ना आसान है:

SELECT d.* 
FROM department as d LEFT OUTER JOIN employee as e 
ON d.did = e.did 
WHERE e.did IS NULL 

मैं इस क्वेरी को जेपीक्यूएल में अनुवाद करने का तरीका नहीं देख सकता। जेपीक्यूएल के लिए जो भी उदाहरण मिले हैं, वे लिंक को दूसरे तरीके से लिंक करते हैं, उदाहरण के लिए।

SELECT e FROM Employee e LEFT JOIN e.departmert d 

जबकि मैं और अधिक

SELECT d FROM Department d LEFT JOIN d.???? WHERE e.department IS NULL 

की तरह कुछ की जरूरत है लेकिन विभाग यह के कर्मचारियों के लिए एक संदर्भ को बनाए रखने नहीं करता है (अपने आवेदन में यह नहीं विभागों और कर्मचारियों है जाहिर है)। क्या यह जेपीक्यूएल में भी संभव है?

उत्तर

9

जो भी आप करने का प्रयास कर रहे हैं, उसे करने के लिए, आपको विभागों -> कर्मचारियों (अपनी उदाहरण इकाइयों का उपयोग करके) से मैपिंग सेट करना होगा।

SELECT d FROM Department d WHERE d.employees IS EMPTY 

जो तुम बराबर परिणाम देना चाहिए: आप @OneToMany की mappedBy विशेषता है, जो सबसे अधिक संभावना अपने स्कीमा, उदा को बाधित नहीं होगा,

@Entity 
class Department { 
    ... 
    @OneToMany(mappedBy="employee") 
    Collection<Employee> getEmployees() { 
     .... 
    } 
    ... 
} 

यह आपको कुछ चलाने के लिए अनुमति होगी के लिए इस्तेमाल किया जा सकता था।

अपने मानचित्रण में फेरबदल के बिना, आप इच्छित परिणाम प्राप्त करने के लिए इस क्वेरी की तरह कुछ चलाने के लिए सक्षम होना चाहिए:

SELECT d from Department d WHERE NOT EXIST (SELECT e FROM Employee e where e.department = d) 
+0

शानदार, सही जवाब के लिए धन्यवाद। मानचित्रण स्थापित करने के बजाय क्वेरी के लिए गया था। मुझे यकीन है कि क्वेरी बहुत कुशल नहीं है लेकिन इसे अक्सर नहीं कहा जाएगा। – wobblycogs

+0

जब आइटम संग्रह नहीं होता है, तो "IS EMPTY" भी उपयोग किया जाना चाहिए, लेकिन मैप के साथ केवल एक OneToOne इकाई है? संपादित करें: हाँ, यह काम करता है। – Amalgovinus

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