与属于不同种类父母的实体的种类

时间:2014-01-22 12:53:01

标签: java google-app-engine

在我的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)

如您所见,具有来自不同父母类型(AttachArticle)的父键的实体种类(Task)相同。

我以前没有尝试过这样的关系,也不确定它是否会起作用。 GAE数据存储区可以吗?或者这只是一个不好的做法和建筑缺陷?

1 个答案:

答案 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);

您可能希望了解应用程序需要提供哪种事务,查询和提取,以了解这是否适合您。