【发布时间】:2013-06-24 21:04:17
【问题描述】:
我的应用引擎服务器从客户端数据创建一个实体,并返回(通过 RPC 回调)从它的密钥派生的实体 ID。在另一个事件中,我正在尝试 [并且失败] 根据 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;
公共类 ItemServiceImpl 扩展 RemoteServiceServlet 实现 I_MFF_ItemService { 私有静态最终字符串 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;
}
}
【问题讨论】: