【问题标题】:Entity with an array field and objectify具有数组字段和对象化的实体
【发布时间】:2017-12-26 09:52:04
【问题描述】:

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

【问题讨论】:

    标签: java google-app-engine objectify


    【解决方案1】:

    数据存储本身不存储二维数组。这里发生的情况是 Objectify 将 int[][] 转换为 ArrayList<ArrayList<Long>> 并且本机 API 拒绝它。

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

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

    如果您想要最佳存储,请自己弄清楚如何将其压缩 - 可能压缩成 byte[]。您可以选择一种针对预期稀疏程度进行优化的算法。一个非常稀疏的多维数组最好存储为一系列坐标。

    【讨论】:

      猜你喜欢
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多