是否可以将列表<Key>存储为Google App Engine(GAE)中实体的属性?


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

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

附言虽然以下代码运行良好 -

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

它应该可以毫无问题地工作。你忘了放东西吗?如果未为项目设置 ID,数据存储将自动为实体分配一个整数数字 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);

请查看文档:https://developers.google.com/appengine/docs/java/datastore/entities

而且,最好通过一些第三方API处理数据层,如Objectify:http://code.google.com/p/objectify-appengine/

它应该可以工作。

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

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

不过,Key对象化示例中使用com.googlecode.objectify.Key<T>

不能在数据存储中存储空集合。它必须至少包含一个值。会不会是你错过了...

items.add(item.getKey());

最新更新