2010-02-13 11 views
6

तो मैं फिल्टर आदि मैं एक जावा फ़ाइल कि तरह दिखता है, सर्वलेट्स का उपयोग कर एक Google अनुप्रयोग इंजन का निर्माण करने की कोशिश कर रहा हूँ:hashmap

public class Idea implements Comparator<Idea> { 
@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
private Key key; 

@Persistent 
private User author; 

@Persistent 
private String content; 

@Persistent 
private Date date; 

@Persistent 
private Map<User, Boolean> positiveVotes ; 

@Persistent 
private Map<User, Boolean> negativeVotes; 

public Idea(User author, String content, Date date) { 
    this.author = author; 
    this.content = content; 
    this.date = date; 
    this.positiveVotes = new HashMap<User, Boolean>(); 
    this.negativeVotes = new HashMap<User, Boolean>(); 
} 

लेकिन जब मैं अपने कार्यक्रम चलाने के लिए प्रयास करते हैं, मैं के साथ शुरुआत एक अपवाद ढेर मिलती है:

Feb 13, 2010 5:01:23 PM com.google.apphosting.utils.jetty.JettyLogger warn 
WARNING: /sign 
java.lang.IllegalArgumentException: positiveVotes: java.util.HashMap is not a supported property type. 
at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:145) 
at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:127) 
at com.google.appengine.api.datastore.Entity.setProperty(Entity.java:280) 

तो, मेरे सवाल का कारण है कि यह शिकायत है कि java.util.HashMap एक समर्थित संपत्ति प्रकार नहीं है, और यह भी यह आस-पास काम करने के लिए मैं क्या करूँ सकता है। धन्यवाद! उम्मीद है कि कोई जल्द ही जवाब देगा।

उत्तर

2

यह क्रमबद्धता के लिए एक समर्थित प्रकार नहीं है। आप समर्थित प्रकारों के the list की समीक्षा कर सकते हैं और वैकल्पिक डिज़ाइन पर विचार कर सकते हैं। मुझे कुछ याद आ रहा है, लेकिन क्या आप केवल उन उपयोगकर्ताओं के सेट रख सकते हैं जो इस विचार का समर्थन करते हैं या विरोध करते हैं? बुलियन का उद्देश्य क्या है? ध्यान दें कि हैशसेट एक समर्थित प्रकार है।

+0

तो अगर मैं अपनी कक्षा में मानचित्र फ़ील्ड रखना चाहता हूं तो मैं क्या कर सकता हूं? – urfriend

+0

क्या आप अधिक कोड दिखा सकते हैं, या बुलियन मूल्य के उद्देश्य को समझा सकते हैं? –

+0

वास्तव में मैंने देखा है कि हैशप वास्तव में serializable है http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html। – urfriend

5

आप GAE के रूप में इस क्षेत्र को ध्वज को JDO एनोटेशन जोड़कर एक ब्लॉब मूल्य के रूप में HashMap स्टोर करने के लिए पूछ सकते हैं धारावाहिक संग्रहीत किया जा रहा:

@Persistent (धारावाहिक = "true")

https://code.google.com/intl/pl/appengine/docs/java/datastore/dataclasses.html#Serializable_Objects

+0

बहुत उपयोगी! एक ही कोड एक कस्टम Serializable वर्ग भी बना रहता है। – NoBugs

0

निजी मानचित्र सकारात्मक वोट;

यह देखने के लिए हैशपैप को रखना कि उपयोगकर्ता ने मतदान किया है या नहीं, यदि उपयोगकर्ता की संख्या बड़ी हो तो अत्यधिक अक्षम हो सकती है।

तुम क्यों इस तरह एक वर्ग रखना न:

class Votes { 
private Key key; 
private Key ideaId; 
private User voter; 
private Boolean positive; // true is positive, false is negative 
} 

और हर विचार के लिए सिर्फ वोट तालिका क्वेरी देखने के लिए कि उपयोगकर्ता विचार के लिए मतदान किया है। अगर वह सकारात्मक या नकारात्मक था।

Query query = pm.newQuery(Votes.class); 
query.setFilter("ideaId == :ideaIdParam && user == :userParam"); 
List<Votes> userVotes = query.execute(ideaId, user); 
if(userVotes != null && !userVotes.isEmpty()){ 
return userVotes.get(0).getPositive(); // this gives the users reaction 
} 
else { 
return null; // this means no reaction 
} 

अब आप एक विशेष उपयोगकर्ताओं प्रतिक्रिया या सूची से अधिक पाश पाने के लिए इस का उपयोग करें और क्वेरी से userParam निकाल कर सभी उपयोगकर्ताओं प्रतिक्रियाओं मिल सकती है।

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