GAE:通过id删除objectify

时间:2011-11-09 10:01:08

标签: java google-app-engine google-cloud-datastore objectify

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

希望这有帮助!

答案 1 :(得分:0)

如果您的数据模型允许您让用户成为对象的数据存储祖先,则可以删除查询,因为祖先是密钥的一部分。

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

然后,大多数用户相关数据都将用户作为祖先。这样,每当用户尝试访问或删除资源时,我都不会意外地允许用户对任何不属于她的对象执行此操作。总而言之,只有快速和可达的才能获得。