2011-04-05 15 views
7

Google अनुप्रयोग इंजन में मेरी JDO वस्तुओं की पहचान करने के लिए मैं Key प्रकार का उपयोग करें। यह ठीक काम करता है लेकिन जब मुझे इसे यूआरएल के माध्यम से पारित करने की आवश्यकता होती है तो यह बहुत लंबा हो जाता है।ऐप इंजन पहचानकर्ता। कुंजी बनाम क्रमांक

उदाहरण के लिए: http://mysite.com/user/aghtaWx1LWFwcHIZCxIGTXlVc2VyGAMMCxIHTXlJbWFnZRgHDA

जब मेरे व्यवस्थापक दर्शक में मेरी संस्थाओं को देखने मैं देख सकता हूँ कि डेटा की दुकान भी मेरी इकाई वस्तु है, जो एक वृद्धिशील संख्यात्मक मान प्रतीत हो रहा है, जो के लिए एक "आईडी" सेट कुंजी स्ट्रिंग की तुलना में काफी छोटा है। क्या मैं अपनी वस्तु पर जानकारी प्राप्त करने के लिए इसका उपयोग कर सकता हूं? मैं यह कैसे करु? मैंने कुंजी के बजाय आईडी के साथ getObjectbyId() का उपयोग करने का प्रयास किया ... यह काम नहीं करता है।

कोई विचार?

+0

क्या आप आईडी द्वारा प्राप्त करने के लिए उपयोग किए गए कोड को पोस्ट कर सकते हैं? – Yasser

उत्तर

9

हाँ, आप ऐसा कर सकते हैं। जब भी आपको आईडी प्राप्त करने की आवश्यकता होती है तो आप निम्न विधि कॉल का उपयोग कर सकते हैं। मान लें कि आप इकाई वर्ग Useruser नामित की एक वस्तु का उपयोग कर रहे हैं: user.getKey().getId()। आईडी long प्रकार है। अधिक जानकारी के लिए com.google.appengine.api.datastore.Key के JavaDoc देखें।

जब भी आप आईडी आप इसे से Key निर्माण कर सकते हैं और फिर बस वस्तु के लिए क्वेरी की है।

Key key = KeyFactory.createKey("User", id); 
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
User user = datastore.get(key); 
+0

'id' वास्तव में एक स्ट्रिंग है, और यह मूल्य है कि' आईडी/Name' स्तंभ के अंतर्गत डेटा की दुकान में दिख रहा है है। इसके साथ अपने कोड का उपयोग करना काम नहीं करता है। मैं की तरह कुछ मिलता है: 'कुंजी उपयोगकर्ता के साथ तरह उपयोगकर्ता इकाई नहीं मिल सकी (" 50 ")' –

+1

आप देख क्या है डीकोड इकाई कुंजी। यदि आपने ऐसा नहीं किया है तो आपको अपने नियंत्रक कोड (उदा। सर्वलेट) में आईडी पैरामीटर स्ट्रिंग को पार्स करना होगा। कुछ इस तरह एक सर्वलेट में काम करेगा: 'Long.parseLong (httpServletRequest.getParameter (" आईडी ")' आप डेटासंग्रह दर्शक में आईडी 50 के साथ एक इकाई दिखाई दे रही है –

+0

क्षमा करें, मेरी गलती आप एक स्ट्रिंग का उपयोग करने (की है।?। कुंजी बनाते समय इकाई प्रकार का नाम) ऊपर दिए गए कोड को सही किया गया। –

2

आप एक प्राथमिक कुंजी के रूप में अपने इकाई में आईडी को परिभाषित करने की आवश्यकता होगी:

private class MyObject implements Serializable{ 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Long id; 
} 

तो फिर तुम यह कोशिश कर सकते हैं:

long id = someObject.getId(); 

MyObject mo = getPM().getObjectById(MyObject.class, id); 
+0

जैसा कि मेरे प्रश्न में बताया गया है, मैं अपनी कुंजी के लिए "लांग" के बजाय "कुंजी" प्रकार का उपयोग कर रहा हूं। –

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