java - Objectify - java.lang.IllegalStateException : Embedded Map keys must be of type String/Enum/Key<? > 或字段必须指定@Stringify

标签 java google-app-engine objectify

我有一个无法注册的 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);
    }

但这很难说,因为代码位于静态 block 中,因此有很多堆栈跟踪。

最佳答案

Objectify 不知道如何使用日期作为映射键。映射键被转换为属性名称,该名称必须是字符串。因此,您需要发明一个实现 Stringifier 接口(interface)的 DateStringifier 类。这很简单,但您有一些选择 - 您可以将日期字符串化为自纪元以来的毫秒数或某种人类可读的格式。

关于java - Objectify - java.lang.IllegalStateException : Embedded Map keys must be of type String/Enum/Key<? > 或字段必须指定@Stringify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27116477/

相关文章:

Java Junit 测试 HTTP POST 请求

java - (持久化)无法创建实体管理器

python - Google App Engine 中的数据存储

google-app-engine - Go 应用引擎数据存储中的动态索引

java - 为什么 API 调用需要 80 毫秒的延迟才能到达 Controller (在 Google App Engine 中)?

java - spring kafka 偏移量增量,即使自动提交偏移量设置为 false

java - 生成多个圆圈并让它们移动

Java 6 应用程序无法从任何版本的 SDK 部署到 Google App Engine

java - 谷歌应用引擎中的排序结果

java - 如何使用 objectify 在 google 数据存储中正确保存 google 用户?