मैं मापदंड का उपयोग कर रहा ग्राहकों को लाने के लिए क्वेरी।
public class PurchaseOrder
{
.....
.....
@ManyToOne(fetch=FetchType.EAGER, optional=true)
@JoinColumn(name="ReportingCustomer_ID", nullable=true, insertable=false, updatable=false)
@Fetch(FetchMode.JOIN)
@NotFound(action=NotFoundAction.IGNORE)
public ReportingCustomer getReportingCustomer()
{
return reportingCustomer;
}
}
PurchaseOrder हो रही हालांकि यह एक वाम बाहरी में शामिल होता है, जैसा कि नीचे
select ... from PurchaseOrder this_ left outer join ReportingCustomer reportingc2_
on this_.ReportingCustomer_ID=reportingc2_.ReportingCustomer_ID
where ...
- जब ReportingCustomer में एक प्रविष्टि है - यह केवल ऊपर क्वेरी सक्रिय करता है।
- जब रिपोर्टिंग ग्राहक में उस रिकॉर्ड के लिए कोई प्रविष्टि नहीं है - यह प्रत्येक खरीदकर्ता (एम + 1) प्रश्नों के लिए एक क्वेरी को सक्रिय करता है।
मैं डीबी से कनेक्ट करने के लिए "प्रोग्रेस" ड्राइवर का उपयोग करता हूं। मुझे यकीन नहीं है कि यह केवल परिदृश्य में एम + 1 प्रश्न क्यों निकालता है 2.
क्या आपने इस समस्या को हल किया? स्वीकृत उत्तर ने आपकी मदद कैसे की? मुझे एक ही समस्या का सामना करना पड़ रहा है, लेकिन स्वीकृत उत्तर मदद नहीं करता है। –
इसके सरल उत्सुक होने के लिए। आलसी इसे लोड करना बंद कर देगा। तो जवाब यहाँ सही है। छोटी पकड़ यह है कि जब आपके पास एन से एक रिश्ते है, तो यह काम नहीं करता है। तो हमें बाइटकोड वाद्ययंत्र और क्षेत्र गुण संशोधक के साथ जाना होगा। यद्यपि यह हाइबरनेट की एक विशेषता है। –
समस्या, शीर्षक और सामग्री के सुझाव के रूप में समस्या, अनुरोधित fetch मोड 'जॉइन' होने पर 'EAGER' fetch प्रकार के साथ '@ ManyToOne' संबंध' के लिए 'SELECT' कथन जारी करने के लिए हाइबरनेट है। स्वीकृत उत्तर एनोटेशन से 'fetch = FetchType.EAGER' को निकालने के लिए कहता है, एक ऐसी क्रिया जो 'EAGER' के बाद से कुछ भी नहीं बदलेगी, एनोटेशन के लिए डिफ़ॉल्ट fetch प्रकार है; भले ही आप उत्तर को 'LAZY'' के साथ "EAGER' बदलें" के रूप में समझें, यह स्पष्ट नहीं करता है कि हाइबरनेट को 'SELECT' कथन क्यों जारी करते हैं जब इसे ऐसा करने का निर्देश नहीं दिया जाता है। –