GAE 数据存储:尝试使用 python/NDB 读取写入 Java/objectify 的数据时出现运行时错误

GAE datastore: RuntimeError when attempting to use python/NDB to read data written in Java/objectify

我正在使用应用引擎和数据存储。我有两个共享相同数据的 GAE 模块。一个模块在 Java 运行时 运行 并利用 objectify 来 write 数据。另一个在 Python 运行时上运行,并使用 NDB 获取数据 read.

我的其中一个包含嵌入实体的列表。当我尝试从此类(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)

尝试LocalStructuredProperty。 NDB 支持两种结构化数据的方式; LocalStructuredProperty 对应于 java 原生 EmbeddedEntity 结构并且运行良好。

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