3

我正在尝试通过发送对象“主键”(具有自动增量的长 ID)的 ajax 查询从 GAE 数据存储中删除记录。

目前,我正在这样做(硬编码 key=6):

Objectify ofy = ObjectifyService.begin();
ofy.delete( Test1.class , 6);

这有效:它删除具有 Key=6 的实体。但出于安全原因,我需要另一个参数(仅供参考:“parent_user”),因此只有所有者才能删除此对象。似乎Objectify.delete()不允许传递比键更多的参数...

我怎么能解决这个问题?因为Objectify.get()用我的可选参数+键来获取完整的对象然后将整个对象发送到 delete() 是无用的和未优化的......

4

2 回答 2

3

http://objectify-appengine.googlecode.com/svn/trunk/javadoc/index.html中所述,Objectify.delete() 除了对象键、ID 或字符串之外不采用任何其他参数。

因此,您需要首先根据过滤器获取对象,然后将其删除。但是,为了优化这一点,您只能获取对象的键,而不是完整的对象。然后根据密钥删除。

希望这可以帮助!

于 2011-11-09T11:44:18.287 回答
0

如果您的数据模型允许您让用户成为对象的 Datastore 祖先,则可以摆脱查询,因为祖先是键的一部分。

我经常做的是在每个请求开始时对用户进行身份验证,它使用 Objectify 的 @Cached 注解来缓存所有用户(以及他们的权限,这些权限是嵌入到用户中的)。

那么,大部分用户相关数据都以用户为祖先。这样,每当用户尝试访问或删除资源时,我将永远不会意外地允许用户在任何不属于她的对象上执行此操作。总而言之,只获取快速且可缓存的内容。

于 2012-04-02T18:30:09.687 回答