在我的GAE应用程序中,我想实现一个特殊实体,一个可以连接到不同类型父母的子实体。这是一个Attachment
。我想把这些项目放在同一个实体组中,使用祖先查询等等。
可能有:
article1 with Key('Article', 1)
attach1 with Key(article1, 'Attach', 1)
attach2 with Key(article1, 'Attach', 2)
task1 with Key('Task', 1)
attach3 with Key(task1, 'Attach', 1)
如您所见,具有来自不同父母类型(Attach
和Article
)的父键的实体种类(Task
)相同。
我以前没有尝试过这样的关系,也不确定它是否会起作用。 GAE数据存储区可以吗?或者这只是一个不好的做法和建筑缺陷?
答案 0 :(得分:1)
数据存储只是使用一个键来定义一个实体组,所以它不介意这些键是否与不同种类有关。
但是,如果你想get()
一个实体,你需要知道它的祖先,这样你才能形成关键的“路径”。因此,按照您的示例(在Java中),如果您想要get()
attach3 ,您需要知道它的祖先(task1)是Kind Task:
Key ancestorKey = KeyFactory.create("Task", 1); // need to know ancestor is a Task
Key attach3Key = KeyFactory.create(ancestorKey, "Attach", 3);
Entity attach3 = datastore.get(attach3Key);
...如果您想要检索 attach1 :
Key ancestorKey = KeyFactory.create("Article", 1); // here ancestor is an Article
Key attach1Key = KeyFactory.create(ancestorKey, "Attach", 1);
Entity attach1 = datastore.get(attach1Key);
您可能希望了解应用程序需要提供哪种事务,查询和提取,以了解这是否适合您。