【问题标题】:GAE datastore: RuntimeError when attempting to use python/NDB to read data written in Java/objectifyGAE 数据存储:尝试使用 python/NDB 读取用 Java/objectify 编写的数据时出现 RuntimeError
【发布时间】:2017-03-04 02:58:36
【问题描述】:

我正在使用 appengine 和数据存储。我有两个 GAE 模块共享相同的数据。一个模块在 Java 运行时运行,并利用 objectify 来写入数据。另一个在 Python 运行时运行,并使用 NDB 进行数据读取

我的一种包含嵌入实体的列表。当我尝试从这种类型(Python 模块)中获取实体时,会出现以下错误:

RuntimeError: StructuredProperty memberOf expected to find properties separated by periods at a depth of 1; received ['memberOf']

Java/objectify 映射如下所示:

@Entity
public class Person {

    @Id
    private String id;

    @Unindex
    private Set<TeamMembership> memberOf = new HashSet<>();

    public static class TeamMembership {
        private DateTime joinedOn;
        private Ref<Team> team;

        private TeamMembership() {
        }
    }

}

这是各自的 Python NDB 映射:

class Person(ndb.Model):
    memberOf = ndb.StructuredProperty(TeamMembership, indexed=False, repeated=True)


class TeamMembership(ndb.Model):
    joinedOn = ndb.DateTimeProperty(indexed=False)
    team = ndb.KeyProperty(kind='Team', indexed=False, repeated=False)

【问题讨论】:

    标签: google-app-engine google-cloud-datastore app-engine-ndb objectify


    【解决方案1】:

    试试LocalStructuredProperty。 NDB 支持两种结构化数据的方式; LocalStructuredProperty 对应 java 原生的 EmbeddedEntity 结构,效果很好。

    StructuredProperty 格式是一个复杂的野兽,Objectify 在 v4.1 中弃用并在 v5 中完全放弃。

    【讨论】:

      猜你喜欢
      • 2013-09-22
      • 2012-09-04
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多