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/
動作するはずです。
実際、これは多対多および多対1の関係を実装するために使用される方法の1つです。
Key
ただし、Objectifyの例で使用されてcom.googlecode.objectify.Key<T>
います。
空のコレクションをデータストアに保存することはできません。少なくとも 1 つの値が含まれている必要があります。もしかして見逃したかも…
items.add(item.getKey());