-
select d from TKBData d JOIN d.columns c WHERE c.name = column1है- एक TKBData ऑब्जेक्ट ढूंढें जहां उसका एक संबद्ध
columnहै वह वस्तु जिसके लिएnamecolumn1है - एक बार यह तय हो जाने के बाद कि किस TKBData में कम से कम एक
columnहै वह वस्तु जिसके लिएnamecolumn1है , फिर यह अपने सभी संबद्धcolumn. को वापस कर देगा वस्तुएं जिस पर आपका जेपीए में नियंत्रण नहीं है। (देखें एक अन्य प्रश्न का मेरा उत्तर ) वैकल्पिक है देशी sql लिखना और कस्टम गैर-इकाई वस्तुओं को वापस करना - उदाहरण के लिए, आपके पास
TKBDATA_1हैcolumn1. के साथ औरcolumn2संबद्ध, आपके पासTKBDATA_2भी हैcolumn3. के साथ संबद्ध। - जब आप अपनी क्वेरी चलाते हैं, तो यह
TKBDATA_2. को अनदेखा कर देगी औरTKBDATA_1return लौटाने का निर्णय लेता है क्योंकि इसमें कम से कम एकcolumnहैnameके साथ वस्तु =column2. लेकिन उसके बाद आपके पास इस पर नियंत्रण नहीं है कि कौन से संबंधितcolumnTKBDATA_1. के लिए वापस आने वाली वस्तुएं और जेपीए सभी संबद्ध कॉलम ऑब्जेक्ट लौटाएगा - यदि आप कारण के बारे में सुनिश्चित नहीं हैं, तो हाइबरनेट सत्र के बारे में पढ़ें। यह स्मृति में किसी भी संबद्ध प्रविष्टि की अनूठी प्रस्तुति कैसे प्रदान करता है। यह इसकी
dirty checking. का आधार है औरrepeatable read
- एक TKBData ऑब्जेक्ट ढूंढें जहां उसका एक संबद्ध
-
अपना
@OneToManyअपडेट करें इस प्रकार है
@OneToMany(fetch = FetchType.EAGER,
cascade = CascadeType.ALL, orphanRemoval = true)
@Builder.Default
@JoinTable(name = "TKBDATA_TKBCOLUMN",
joinColumns = @JoinColumn(name = "TKBDATA_ID"),
inverseJoinColumns = @JoinColumn(name = "COLUMNS_ID"))
private Set<TKBColumn> columns = Sets.newHashSet();
-
जब जेपीए क्वेरी भाषा की बात आती है, तो मैं क्वेरी के संदर्भ में इन-मेमोरी ऑब्जेक्ट्स के संग्रह के बारे में सोचना चाहूंगा।
-
तो अब वस्तुओं के संदर्भ में निम्नलिखित दो प्रश्नों के अर्थ का वर्णन करने का प्रयास करें।
select d from TKBData d LEFT JOIN d.columns c WHERE c.name = :name
vs
select d from TKBData d JOIN d.columns c WHERE c.name = :name
-
एसक्यूएल के विपरीत मत भूलना जहां आप यहां किसी भी कॉलम का चयन कर रहे हैं, आपने कहा है कि आप टीकेबीडाटा ऑब्जेक्ट्स का चयन करना चाहते हैं और टीकेबीडेटा ऑब्जेक्ट्स को वापस करने के लिए प्रतिबंधित करना चाहते हैं।
-
तो अपने मूल sql के समान परिणाम प्राप्त करने के लिए, दूसरी JPA क्वेरी का उपयोग करें
नोट:
भले ही आपने अपनी sql क्वेरी में लेफ्ट जॉइन का उपयोग किया हो, यह प्रभावी रूप से एक इनर जॉइन sql क्वेरी है क्योंकि आपने where भी लागू किया है उस जॉइन पर सबसे दाहिनी तालिका की स्थिति।