按键删除实体而不先在应用程序引擎中获取它(使用JDO)

时间:2009-11-07 09:11:25

标签: java google-app-engine jdo datanucleus

有没有办法删除实体而无需先从数据存储区中获取它?我假设我已经拥有该实体的密钥或ID。 我想deleteObjectById之类的内容与getObjectById上的PersistenceManager类似。

我能想到的最接近的是使用Query.deletePersistentAll()(如here所示)并指定仅依赖于密钥的查询,但我无法判断是否会获取实体在删除之前。

感谢

编辑:我知道如何使用低级API以及python API执行此操作。我想知道是否有办法在JDO层内完成它。

3 个答案:

答案 0 :(得分:2)

datanucleus在google group上回答了我的问题:

  

不是真的。问题是对象可以有关系等等,   因为这些可能导致级联操作,所以通常必须这样做   首先加载到内存中。它不需要的唯一情况   如果要删除的对象的类有,则加载到内存中   没有关系。

     

进入低级API并且可能会也可能没有爆破对象   对相关对象产生影响......也许有人负责   它可以对此发表评论。

答案 1 :(得分:2)

我不确定JDO,但对于Python来说,这可能是一个小小的黑客。您需要使用相同的密钥“创建”新实例,然后将其删除。它只会打一次数据库。

instance = Model(key=key_to_delete, required_property='dummy')
instance.delete()

答案 2 :(得分:0)

如何使用Low-level API

我认为DataService.delete(Key)将完全符合您的需求。

如果您使用Long作为密钥,您将首先使用KeyMaker创建密钥。

Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");