List<Key> items = new ArrayList<Key>();
user.setProperty("ItemsList", items);
上面给出的代码不起作用。在 GAE 中使用 Java 平台可以通过哪些方式实现这一点?
PS虽然以下代码运行良好 -
List<String> items = new ArrayList<String>();
user.setProperty("ItemsList", items);
List<Key> items = new ArrayList<Key>();
user.setProperty("ItemsList", items);
上面给出的代码不起作用。在 GAE 中使用 Java 平台可以通过哪些方式实现这一点?
PS虽然以下代码运行良好 -
List<String> items = new ArrayList<String>();
user.setProperty("ItemsList", items);
它应该可以正常工作。你忘记放物品了吗?如果您没有为项目设置 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);
请查看文档:https ://developers.google.com/appengine/docs/java/datastore/entities
而且,最好通过 Objectify 等第三方 API 处理数据层:http ://code.google.com/p/objectify-appengine/
它应该工作。
事实上,这是实现多对多和多对一关系的方法之一。
例如,请参见http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Multi-Value_Relationship
Key
在 Objectify 示例中使用的是com.googlecode.objectify.Key<T>
。
您不能在数据存储中存储空集合。它必须包含至少一个值。难道是你错过了...
items.add(item.getKey());