应用程序引擎数据存储和Java低级api:多对多关系

应用程序引擎数据存储和Java低级api:多对多关系,java,google-app-engine,google-cloud-datastore,entity-relationship,low-level-api,Java,Google App Engine,Google Cloud Datastore,Entity Relationship,Low Level Api,我只是想知道如何在数据存储中使用低级api在两个实体之间建立多对多关系,我一直在寻找,但找不到解释如何建立这种关系的文档。我希望有人能帮忙 但是,如果实体A和实体B处于多对多关系中,那么如何将它们存储在数据存储中呢。我的意思是,这是一个在数据存储中存储多对多关系的好解决方案,还是一个好的解决方案?此代码正常还是错误 Entity entityA = new Entity("TypeA"); entityA.setProperty("name", "nameUserA"); Entity ent

我只是想知道如何在数据存储中使用低级api在两个实体之间建立多对多关系,我一直在寻找,但找不到解释如何建立这种关系的文档。我希望有人能帮忙


但是,如果实体A和实体B处于多对多关系中,那么如何将它们存储在数据存储中呢。我的意思是,这是一个在数据存储中存储多对多关系的好解决方案,还是一个好的解决方案?此代码正常还是错误

Entity entityA = new Entity("TypeA");
entityA.setProperty("name", "nameUserA");

Entity entityB = new Entity("TypeA");
entityA.setProperty("name", "nameUserB");

ds.put(entityA);
ds.put(entityB);

Entity entityChild = new Entity("entityChild",entityAKey);
entityChild.setProperty("name","child");

 ds.put(entityChild);

Entity entityChild = new Entity("entityChild",entityBKey);
entityChild.setProperty("name","child");

 ds.put(entityChild);

AppEngine不为多对多关系提供任何功能

您可以通过创建自己的实体来模拟它,该实体包含两个字段:

class AtoBRelations {
  Key entityA 
  Key entityB
}
我的常见模式是为多对多关系(甚至是其他数据库)提供一个额外的表

顺便说一句,在大多数情况下,这不是最佳解决方案。最佳解决方案取决于必须使用多少这种多对多关系,并且几乎没有不同的解决方案

例如,还有第二种解决方案:您可以存储相关实体的列表,如:

class EntityA {
   List<Key> entitiesB
}
类实体a{
列表实体b
}

但如果实体A和实体B处于多对多关系中,如何将其存储在数据存储中。我的意思是,您必须创建第三个条目
AtoBRelationship
,并将其存储起来。顺便说一句,最好告诉你你到底想达到什么,我告诉你最好的解决方案我已经用更多的信息编辑了我的问题,你说我必须创建一个具有两个属性的新实体,在多对多关系中找到的实体的键?用关系的键创建新实体是一种好方法吗?像这样的实体实体关系=新实体(“关系A-B”);设置属性(“keyA”,keyA);setProperty(“keyB”,keyB)?创建entityChild的目的是什么?你想如何处理关系,什么实体之间的关系?我只是想表示一个多对多的ralatioship,如果我有一个子实体,用每个父实体的键创建两次,这是一个好的解决方案?还是只创建一次并创建一个包含这些实体的键作为属性的实体更好?这不是1-1(最大1-n,如果一个实体的子项很少)关系吗?entityA-第一个entityChild,entityB-第二个entityChild使用低级api在数据存储中保持多对多关系的方式是什么?如果没有大量(几十万)相关实体,那么我将使用相关项的键列表。实际上它是一对多的关系,但也可以通过反向关系查询,所以在大多数情况下它变成了多对多。