我有一个Objectify实体未能注册。
这是该课程的精简版:
@com.googlecode.objectify.annotation.Entity
public class Insight {
@com.googlecode.objectify.annotation.Id long id;
public Map<Date, Double> timeseries;
}
以下是我遇到的错误:
java.lang.IllegalStateException: Embedded Map keys must be of type String/Enum/Key<?> or field must specify @Stringify
我认为错误发生在Objectify注册期间:
class OfyService {
static {
factory().register(Insight.class);
}
很难分辨,因为有很多堆栈跟踪,因为代码在静态块中。
答案 0 :(得分:1)
Objectify不知道如何处理Date作为Map键。映射键变为属性名称,必须是字符串。因此,您需要创建一个实现DateStringifier
接口的Stringifier
类。这是微不足道的,但你有一些选择 - 你可以将你的日期字符串化为毫秒以来的时代或某种人类可读的格式。
答案 1 :(得分:0)
根据https://code.google.com/p/objectify-appengine/wiki/Entities#Maps,我必须以下列方式声明Map,因为Map的键不是String:
@Stringify(com.googlecode.objectify.stringifier.KeyStringifier.class)
public Map<Date, Double> timeseries;