具有数组字段和客观化的实体

时间:2017-12-26 09:52:04

标签: java google-app-engine objectify

我使用 Objectify 5.0 与GAE数据存储进行交互。我有一个像这样的实体类:

@Entity
public class A {
    @Id long id;
    int[][] data = new int[365][];
}

但是当我尝试保存实体时,我遇到以下错误:java.util.ArrayList is not a supported property type

处理具有数组字段的实体的最佳方法是什么?是否有@Mapify / @Stringify替代自定义序列化或存在更好的问题解决方案?

1 个答案:

答案 0 :(得分:1)

数据存储区本身不存储二维数组。这里发生的事情是Objectify正在将int[][]转变为ArrayList<ArrayList<Long>>而本机API拒绝它。

如果您想存储int[][],您需要弄清楚如何将该结构转换为数据存储区可以处理的内容。一个选项是具有一个字段的对象数组,该字段本身是一个int数组。基本上Foo[]其中Foo有一个字段,int[]。这不一定是节省空间的,序列化可能很昂贵,特别是对于大型矩阵。

另一种选择是使用@Serialize。它应该在空间上合理有效。

如果你想要最佳存储空间,请弄清楚如何自己压缩它 - 可能是byte[]。您可以选择一种优化稀疏度预期水平的算法。非常稀疏的多维数组最好存储为一系列坐标。