私のアプリ エンジン サーバーは、クライアント データからエンティティを作成し、キーから派生したエンティティの ID を (RPC コールバック経由で) 返します。別のイベントでは、ID に基づいてエンティティを削除しようとしています [そして失敗しています]。つまり、ID からキーを作成し、元のエンティティを削除します。
IDから元のキーを再現することは可能ですか?
そうでない場合、クライアントからエンティティを削除するにはどうすればよいですか?
ここに私のRemoteServiceServletがあります:
java.util.Date をインポートします。java.util.List をインポートします。
gid.mff.item_manager.client.I_MFF_ItemService をインポートします。gid.mff.item_manager.client.mffobjects.MFF_Item1; をインポートします。
com.google.appengine.api.datastore.DatastoreService をインポートします。com.google.appengine.api.datastore.DatastoreServiceFactory をインポートします。com.google.appengine.api.datastore.Entity をインポートします。com.google.appengine.api.datastore.FetchOptions をインポートします。com.google.appengine.api.datastore.Key をインポートします。com.google.appengine.api.datastore.KeyFactory をインポートします。com.google.appengine.api.datastore.Query をインポートします。com.google.gwt.user.server.rpc.RemoteServiceServlet をインポートします。
public class ItemServiceImpl extends RemoteServiceServlet implement I_MFF_ItemService { private static final String MFF_ITEM1_ROOT_KEY = "MFF_Item1_Root_Key";
private final static String LOG = "I_MFF_ItemService";
@Override
public MFF_Item1 getItem(long id)
{
//TODO get one from the data store
System.out.println("the id is: " + id);
MFF_Item1 m = new MFF_Item1();
m.setTitle("corck");
m.setId(10);
return m;
}
@Override
public Long createItem(MFF_Item1 mff_Item1)
{
Key itemListKey = KeyFactory.createKey("MffItems", MFF_ITEM1_ROOT_KEY);
Date date = new Date();
Entity item = new Entity("Item1", itemListKey);
item.setProperty("date", date);
item.setProperty("header", mff_Item1.getTitle());
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.put(item);
printItems(datastore, itemListKey);
return item.getKey().getId();
}
private void printItems(DatastoreService datastore, Key itemListKey)
{
Query query = new Query("Item1", itemListKey).addSort("header", Query.SortDirection.DESCENDING);
List<Entity> items = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(40));
for(Entity e: items)
{
System.out.print("The Header is: " + e.getProperty("header"));
System.out.println(" The key id is: " + e.getKey().getId());
}
}
@Override
public boolean deleteItem(Long id)
{
System.out.println(LOG +" delete item with this id: " + id);
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Key key = KeyFactory.createKey("MffItems", id);
datastore.delete(key);
// TODO Auto-generated method stub
return true;
}
}