2017-08-31 13 views
5

मुझे अभी तक पता है कि FindBy कई परिणामों को वापस कर सकता है जबकि FindOneBy एक ही परिणाम या शून्य वापस कर देगा जब हम इसे निम्न तरीके से उपयोग करेंगे।स्प्रिंग डेटा में findBy और findOneBy के बीच अंतर जेपीए

List<Department> findByDepartmentName(String name); 
Department findOneByDepartmentId(Long Id); 

अब, मेरा सवाल है, क्या मैं इस तरह से खोजने का उपयोग कर सकता हूं?

Department findByDepartmentId(Long Id); 

यदि हाँ,

  • मान दी ईद के लिए कई रिकॉर्ड हैं देता है।
  • किस आधार पर findBydepartmentId एक एकल रिकॉर्ड लौटाता है?

आखिरकार, जब मुझे ढूंढने का उपयोग क्यों नहीं किया जाना चाहिए मुझे खोजने के स्थान पर क्यों?

+0

मेरे पास एक ही प्रश्न है, क्या आप इसके नीचे पहुंच गए हैं? – Doug

उत्तर

0

क्या मैं इस तरह से ढूंढ सकता हूं? विभाग ढूंढें डिप्पेमेंट आईडी (लांग आईडी);

हां, यह वाक्यविन्यास वसंत जेपीए दृष्टिकोण से तकनीकी रूप से सही है। हालांकि स्प्रिंग जेपीए उस चीज का अनुमान लगाता है जो आप अपनी क्वेरी के साथ रिटर्न प्रकार को देखकर हासिल करने की कोशिश कर रहे हैं।

मूल रूप से इन वापसी प्रकार के लिए मामलों रहे हैं:

  • आपकी क्वेरी के साथ

    आप एक ही मान देने के लिए चाहते हैं - आप बुनियादी प्रकार निर्दिष्ट कर सकते हैं, Entity T, Optional<T>, CompletableFuture<T> आदि

  • साथ आपकी क्वेरी आप टी का संग्रह वापस करना चाहते हैं - आप List<T>, Stream<T>, Page<T>, Slice<T> आदि

01 निर्दिष्ट कर सकते हैं

कहा जा रहा है, आपकी क्वेरी परिभाषा:

Department findByDepartmentId(Long Id); 

मतलब यह है कि आपको एक ही परिणाम की उम्मीद (क्योंकि आप एक वापसी प्रकार के रूप में एक इकाई निर्दिष्ट किया है)। यह इस बात पर प्रतिबिंबित होगा कि कैसे वसंत जेपीए क्वेरी निष्पादित करता है - पर javax.persistence.Query इंटरफ़ेस पर कॉल करेगा, जो exception फेंक देगा यदि एक से अधिक ऑब्जेक्ट मानदंडों को पूरा करते हैं।

किस आधार पर पता चलता है कि डिज़ाइन आईडी एक रिकॉर्ड लौटाता है?

इस आधार पर कि उस आईडी के साथ एक ही वस्तु है, अन्यथा यह एक अपवाद फेंक देगा।

मुझे या क्यों उपयोग नहीं करना चाहिए खोजने के स्थान पर कोई नहीं?

उन दोनों के अलग-अलग अर्थ हैं और वे एक दूसरे के बीच नहीं हैं।

findOneBy हमेशा परिणाम प्राप्त करने के परिणामस्वरूप SingleResult() को शामिल किया जाता है।

findBy में ऊपर दिए गए परिभाषाओं के अनुसार रिटर्न प्रकार के आधार पर अलग-अलग व्यवहार हैं।

0

findOneByXX यह सुनिश्चित करेगा कि केवल एक या कोई मूल्य नहीं है, यदि 2 मान अपवाद फेंक दिए जाएंगे। हालांकि findByXX विशिष्टता की यह जांच नहीं करता

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