2013-07-23 5 views
6

तो मुझे पता है कि स्प्रिंग डेटा के मोंगो टेम्पलेट में कई प्रकार के "ऑब्जेक्ट सहेजें" ऑपरेशंस हैं, जैसे सेव, अपरर्ट, डालने और अपडेट करें।वसंत डेटा का मोंगो रिपोजिटरी इतना सीमित क्यों है?

दूसरी ओर, वसंत डेटा के मोंगो रिपोजिटरी इंटरफ़ेस में एक दृढ़ता विधि है: "सहेजें"। अब, जाहिर है, अगर मैं कार्यक्षमता बनाना/अपडेट/अपरिवर्तित करना चाहता हूं, तो मैं उन्हें आसानी से कार्यान्वित कर सकता हूं। बस "सहेजें" पर कॉल करने से पहले प्राप्त करें और जांचें कि इकाई मौजूद है या नहीं। लेकिन यह अजीब लगता है कि मोंगो टेम्पलेट में विकल्पों की विविधता है (मैं यह भी नहीं समझ सकता कि बचत और अपरिपक्व के बीच क्या अंतर है), लेकिन स्प्रिंग डेटा के रिपो इतने सीमित हैं।

क्या आपको लगता है कि यदि आप बनाएं/अपडेट सेमेन्टिक्स का उपयोग करने जा रहे हैं, तो आप स्प्रिंग डेटा मोंगो रिपॉजिटरीज़ का उपयोग करने के लिए अपर्याप्त/आलसी हैं, या + get + null check + repository.save vs. के बीच अंतर है। mongoTemplate.insert के बारे में बहुत अप्रासंगिक है?

उत्तर

0

वसंत डेटा repository pattern का पालन करता है। Repository डीएओ परत पर एक अमूर्त है और डोमेन इकाइयों को सामान्य भंडारण और पुनर्प्राप्त करने के लिए कार्य करता है। रिपोजिटरी परत के नीचे डीएओ परत भाग है जहां MongoTemplate उपयोग किया जाता है।

तो Repository में तार्किक बचत विधि है। डोमेन बिंदु से आपको इस बात पर परवाह नहीं करना चाहिए कि डोमेन इकाई बिल्कुल कैसे जारी है। आप केवल MongoTemplate की बचत विधि और उपयोग का उपयोग MongoRepository कार्यान्वयन पर निर्भर करते हैं।

3

आप XXXRepositoryCustom का उपयोग करके अपने स्वयं के भंडार को अनुकूलित कर सकते हैं और इसके लिए कार्यान्वयन लिख सकते हैं।

public interface AccountRepository extends MongoRepository<Account, String>, AccountRepositoryCustom{ 

    @Query("{ 'email' : ?0 }") 
    Account findByEmail(String email); 

} 

सूचना ऊपर इंटरफ़ेस अपनी खुद की AccountRepositoryCustom इंटरफ़ेस लागू होता है:

यहाँ एक उदाहरण है।

public interface AccountRepositoryCustom { 

    public boolean updateAccountToken(String id, String token); 

} 

इसके बाद, इसके लिए एक कार्यान्वयन बारे में:

फिर अपने खुद के AccountRepositoryCustom परिभाषित

public class AccountRepositoryCustomImpl implements AccountRepositoryCustom { 

    @Autowired 
    private MongoTemplate mongoTemplate; 

    @Override 
    public boolean updateAccountToken(String id, String token) {  
      // your code 
    } 
} 
+2

हां, मैंने पहले ऐसा किया है। लेकिन यह एक बॉयलरप्लेट कोड है जो अद्यतन और एक विधि बनाने के लिए लिखने के लिए लिखता है जब स्प्रिंग डेटा के भंडार का मुख्य बिंदु बॉयलरप्लेट कोड आईएमओ को कम करना है। – CorayThan

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