我有一个Objectify实体未能注册。Objectify - java.lang.IllegalStateException:嵌入式Map键必须是String/Enum/Key类型<?>或字段必须指定@Stringify
下面是类的精简版本:
@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
我认为错误是物化在注册过程中发生的:
class OfyService {
static {
factory().register(Insight.class);
}
虽然很难说,因为有很多堆栈跟踪,因为代码是在stat ic块。
这不可能解决问题 - 它只会延迟问题,直到您真正尝试使用它。 'KeyStringifier'串化键,而不是日期。 – stickfigure 2014-11-25 21:26:19
感谢@stickfigure,我认为它解决了这个问题,因为我通过了'java.lang.IllegalStateException'。但是我的代码仍然不起作用。我不确定我看到的问题是否是您预期的问题,但我正在尝试查询我的对象,即使我在数据存储中看到它,也没有找到它。这可能是最终一致性的结果。我不是通过'timeseries'字段查询我的'Insight'对象,而是通过其他字段来查询,它只是找不到'Insight'。这是否是延迟问题直到我尝试使用它的含义的例子? – 2014-11-25 22:03:48
当您尝试保存()该字段时,您应该得到一个ClassCastException。 – stickfigure 2014-11-26 19:42:41