【问题标题】:Delete an entity by key without fetching it first in app engine (using JDO)按键删除实体而不首先在应用引擎中获取它(使用 JDO)
【发布时间】:2010-12-14 03:09:59
【问题描述】:

有没有一种方法可以删除实体而无需先从数据存储中获取它?我假设我已经拥有实体的密钥或 ID。 我正在考虑类似deleteObjectById 的东西,它类似于PersistenceManager 上的getObjectById

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

谢谢

编辑:我知道如何使用低级 API 以及 python API 来做到这一点。我想知道是否有办法在 JDO 层中做到这一点。

【问题讨论】:

    标签: java google-app-engine jdo datanucleus


    【解决方案1】:

    使用Low-level API怎么样?

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

    如果使用 Long as 密钥,则需要先使用 KeyMaker 创建密钥。

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

    【讨论】:

    • 我知道该功能存在于数据存储中,我正在尝试确定是否可以从 JDO 层中访问它。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      我不确定 JDO,但对于 Python,这可以通过一个小技巧来实现。您需要使用相同的密钥“创建”一个新实例,然后将其删除。它只会访问数据库一次。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多