EmbeddedEntity中Key的作用是什么?

What is the purpose of Key in EmbeddedEntity?

AppEngine 数据存储对嵌套实体使用 EmbeddedEntity。但是我不明白EmbeddedEntity中的Key的用途?什么时候可以用?

例如:

    Entity book = new Entity("Book");
    book.setProperty("name", "Hollow Man");
    book.setProperty("year", 2000);

    EmbeddedEntity author = new EmbeddedEntity();
    author.setKey(KeyFactory.createKey("AUTHOR", 123));
    author.setProperty("name", "Den Simons");

    book.setProperty("author", author);

    datastore.put(book);

稍后我可以获取 book 并从中获取 authorauthor 将设置密钥,这意味着密钥被保留。但是可以用这个键查询吗? EmbeddedEntity javadoc 说:

It is not queryable when stored in the datastore.

那么 EmbeddedEntityKey 的目的是什么?

https://cloud.google.com/appengine/docs/java/datastore/entities#Java_Embedded_entities 中的示例展示了如何有选择地设置 另一个 相同类型实体的键作为嵌入实体的键,即 没有嵌入,这样以后就可以"recover the original entity from the embedded entity"了。我猜不是经常需要,但是当你确实需要它的时候很方便,也许吧!

那里的相关代码片段是:

// Entity contactInfo = /*...*/;
EmbeddedEntity embeddedContactInfo = new EmbeddedEntity();
Key infoKey;

infoKey = contactInfo.getKey();
embeddedContactInfo.setKey(infoKey);