2010-12-17 22 views
5

द्वारा मॉर्फिया पूछताछ मैं मोंफिया के लिए पोजो मैपर मॉर्फिया का उपयोग कर रहा हूं, और मुझे एक ऐसा काम मुश्किल लगता है जो मेरे विचार में बहुत आसान होना चाहिए: आईडी द्वारा ऑब्जेक्ट प्राप्त करना। मैं संग्रह में सभी ऑब्जेक्ट्स ढूंढने में सक्षम हूं लेकिन मुझे सूची से प्राप्त आईडी का उपयोग करके पूछताछ का सरल कार्य नहीं पता है। मैं वास्तव में ऑब्जेक्ट आईडी के बारे में बात कर रहा हूं। अगर मैं इसे JSON में प्रस्तुत करने का प्रयास करता हूं तो मुझेआईडी

उत्तर

14

यह प्रश्न अपूर्ण लगता है।

ऐसा लगता है कि आपके प्रश्न का उत्तर Morphia QuickStart page पर है। निम्नानुसार सरल लगता है।

Datastore ds = morphia.createDatastore("testDB"); 
String hotelId = ...; // the ID of the hotel we want to load 
// and then map it to our Hotel object 
Hotel hotel = ds.get(Hotel.class, hotelId); 

तो आपको निश्चित रूप से अधिक जानकारी की आवश्यकता होगी।

+5

संस्था के लिए "@Id ObjectId आईडी" जोड़ने के लिए कभी नहीं भूल सकता। यह आपको जीवन आसान बनाता है। – caarlos0

7
Datastore ds = morphia.createDatastore("testDB"); 
String hotelId = "516d41150364a6a6697136c0"; // the ID of the hotel we want to load 
ObjectId objectId = new ObjectId(hotelId); 
// and then map it to our Hotel object 
Hotel hotel = ds.get(Hotel.class, objectId); 
+0

क्या आप समझा सकते हैं कि आपका कोड क्यों काम करता है या यह क्या कर रहा है? सबसे अच्छा जवाब सिर्फ कोड को काम करने के बजाय समाधान की व्याख्या करता है। – nathangiesbrecht

+0

@nathangiesbrecht पिछले [उत्तर] में (http://stackoverflow.com/a/4475711/1094584) गलत है। MongoDB आईडी प्रकार स्ट्रिंग नहीं है। MongoDB आईडी का प्रकार ऑब्जेक्ट आईडी (org.bson.types.ObjectId) है। –

5

आप आईडी के आधार पर पता लगा रहे हैं और आईडी उपयोगकर्ता द्वारा प्रदान की जाती है (मतलब है कि यह डेटा की जो भी प्रकार किया जा सकता है), तो आप ऊपर दिए गए समाधान का उपयोग नहीं करना चाहिए।

रूप documentation में बताया गया है, एक ObjectId 12 बाइट्स के होते हैं, इसलिए यदि आप new ObjectId(myValue) को कुछ और ही गुजरती हैं, अपने कोड एक IllegalArgumentException फेंक देते हैं।

यहाँ कैसे मैं विधि लागू आईडी से मिल रहा है:

public Model findById(String id) throws NotFoundException { 
    if (!ObjectId.isValid(id)) { 
     throw new NotFoundException(); 
    } 

    ObjectId oid = new ObjectId(id); 
    Model m = datastore().find(Model.class).field("_id").equal(oid).get(); 
    if (m == null) { 
     throw new NotFoundException(); 
    } 
    return m; 
} 
+0

यदि आईडी मान्य ऑब्जेक्ट आईडी नहीं है, तो * इसे एक अवैध आर्ग्यूमेंट अपवाद को फेंक देना चाहिए, न कि NotFoundException। – metaforge