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



i使用 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的替代方法用于自定义序列化或存在更好的解决方案?

数据存储不会在本质上存储二维数组。这里发生的事情是,客观化将int[][]变成ArrayList<ArrayList<Long>>,而本机API拒绝它。

如果要存储int[][],则需要弄清楚如何将该结构转换为数据存储可以处理的内容。一个选项是一个具有一个字段的对象,本身就是一个ints。基本上是Foo[],其中Foo具有一个字段,一个int[]。这不一定是有效的,并且序列化可能很昂贵,尤其是使用大型矩阵。

另一个选项是使用@Serialize。它应该是合理效率的空间。

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

最新更新