दोनों रिपॉजिटरी के लिए, आप @Query
. का उपयोग कर सकते हैं एक MongoDB JSON क्वेरी स्ट्रिंग निर्दिष्ट करने के लिए एनोटेशन जिसका उपयोग विधि के नाम से प्राप्त क्वेरी के बजाय किया जाएगा (आपको पता होना चाहिए कि रिपॉजिटरी के विधि नामों को पार्स करने और MongoDB प्रश्नों के निर्माण के लिए एक सम्मेलन है)।
तो, @Query
. का उपयोग करके , आप यह कर सकते हैं:
@Repository
public interface ManagerRepository extends MongoRepository<Employee, String>
@Query(value="{ '_class' : 'com.igmtechnology.gravity.core.init.test.Manager' }")
List<Person> findAllManagers();
}
परदे के पीछे, यह इस तरह की एक क्वेरी उत्पन्न करेगा:
db.person.findAll({'_class' ; 'com.igmtechnology.gravity.core.init.test.Manager'});
हालाँकि, इस कोड के साथ एक छोटी सी समस्या है। यदि आप Manager
. का पूर्ण-योग्य वर्ग नाम बदलते हैं , तो क्वेरी RuntimeException
. नहीं फेंकेगी , लेकिन कुछ भी नहीं लौटाएगा। इस मामले में आप @Query
. के अंतर्गत वाइल्डकार्ड का उपयोग कर सकते हैं ।
@Query(value="{ '_class' : ?0 }")
List<Person> findAllManagers(String className);
फिर, जब आप विधि का आह्वान करते हैं, तो आप बस यह कर सकते हैं:
managerRepository.findAllManagers(Manager.class.getName());
प्रदान किया गया Manager.class.getName()
?0
. की जगह लेगा वाइल्डकार्ड और आपकी क्वेरी ठीक से बन जाएगी।
वही Employee
. के लिए जाता है इस अंतर के साथ भंडार कि आपको Employee
. का पूर्ण-योग्य वर्ग नाम प्रदान करना होगा @Query
. में का value
विशेषता।
अधिक जानकारी: