持久性管理器中的hashmap

urf*_*end 6 java google-app-engine persistence

所以我正在尝试使用servlet,过滤器等构建一个谷歌应用程序引擎.我有一个看起来像这样的java文件:

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>();
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行我的程序时,我得到一个异常堆栈,开头是:

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)
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是为什么它抱怨java.util.HashMap不是受支持的属性类型,我还能做些什么来解决它.谢谢!希望有人尽快回复.

Sea*_*gan 5

您可以要求GAE将HashMap存储为Blob值,方法是添加JDO注释以将此字段标记为存储序列化:

@Persistent(序列= "真")

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


Mat*_*hen 2

它不是序列化支持的类型。您可以查看支持的类型列表,并考虑替代设计。我可能会遗漏一些东西,但是您可以保留支持或反对该想法的用户集吗?布尔值的目的是什么?请注意,HashSet 是受支持的类型。