是否可以将List <key>存储为Google App Engine(GAE)中实体的属性?</key>

时间:2013-01-27 13:23:35

标签: java google-app-engine google-cloud-datastore

    List<Key> items = new ArrayList<Key>();
    user.setProperty("ItemsList", items);

上面给出的代码不起作用。在GAE中使用Java平台可以实现这一目标的方法是什么?

P.S。虽然下面的代码运行正常 -

List<String> items = new ArrayList<String>();
user.setProperty("ItemsList", items);

3 个答案:

答案 0 :(得分:3)

它应该没有任何问题。你忘记把物品放了吗?如果未设置项目的ID,则DataStore将自动为实体分配整数数字ID。您需要将生成的密钥放入列表中。 以下是示例代码:

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Entity item = new Entity("Item");
datastore.put(item);        

Entity user = new Entity("User");
List<Key> items = new ArrayList<Key>();
items.add(item.getKey());
user.setProperty("ItemsList", items);
datastore.put(user);

请查看文档:{​​{3}}

最好通过像Objectify这样的第三方API来处理数据层:https://developers.google.com/appengine/docs/java/datastore/entities

答案 1 :(得分:1)

它应该有用。

事实上,这是实现多对多和多对一关系的方式之一。

例如,请参阅http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Multi-Value_Relationship

Objectify示例中使用的

Key虽然是com.googlecode.objectify.Key<T>

答案 2 :(得分:0)

您无法在数据存储区中存储空集合。它必须至少包含一个值。可能是你错过了......

items.add(item.getKey());