2010-02-13 27 views
6

yüzden filtreleri ben şuna benzer bir java dosyası var vs. servlet kullanarak google app motoru kurmaya çalışıyorum: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>(); 
} 

ama benim program çalıştırmayı denediğinizde, ben ile başlayan bir özel durum yığını olsun:

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) 

Yani, benim sorum o java.util.HashMap desteklenen bir özellik türü değil şikayet etmez ve ayrıca bunun bir çözüm için yapmam ne olabilir nedeni budur. Teşekkürler! Umarım yakında cevap verir.

cevap

2

Bu serileştirme için desteklenen bir tip. Desteklenen türlerin the list'unu inceleyebilir ve alternatif tasarımları düşünebilirsiniz. Bir şeyleri kaçırıyor olabilirim, ancak bu fikri destekleyen veya bunlara karşı çıkan kullanıcıların setlerini tutabiliyor musunuz? Boole'nin amacı nedir? HashSet'in desteklenen bir tür olduğunu unutmayın.

+0

benim sınıfta bir harita alanı var istiyorum eğer öyleyse ne yapabilirim? – urfriend

+0

Daha fazla kod gösterebilir veya boole değerinin amacını açıklayabilir misiniz? –

+0

aslında ben HashMap http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html aslında seri hale getirilebilir ettim. – urfriend

0

özel Haritası positiveVotes;

kullanıcı olarak görmek için bir hashmap tutulması veya kullanıcı sayısı büyük hale gelirse son derece verimsiz hale gelebilir değil.

neden böyle bir sınıf tutmak yok:

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

ve her fikir için

sadece kullanıcı fikri için oy görmek için Oy tabloyu sorgulamak. eğer varsa olumlu ya da olumsuz oldu.

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 
} 

şimdi listeye göre belirli kullanıcılar reaksiyonu veya döngü almak için kullanabilir ve sorgudan UserParam kaldırarak tüm kullanıcılar tepkilerini alabilirsiniz.