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[]
。您可以选择一种优化预期稀疏水平的算法。一个非常稀疏的多维阵列最好存储为一系列坐标。