我有一個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