Google表示JDO不会从数据存储中进行级联删除。你是怎么做到的?

时间:2011-07-01 04:43:41

标签: java google-app-engine jdo

谷歌说:

  

注意:JDO实现的工作是删除依赖的子对象,而不是数据存储。如果使用低级API或管理控制台删除父实体,则不会删除相关的子对象。

那么如何删除具有ArrayList ???

的子实体的实体呢?

这不应该是一个基本功能 - 从父实体中删除从属子实体吗?

2 个答案:

答案 0 :(得分:4)

并不是说JDO没有做级联依赖的孩子。事实上,它确实说它确实是这样做的,但它是JDO中的代码。因此,如果直接触摸数据库(SQL或管理工具),则不会删除相关子项。

答案 1 :(得分:0)

我实际上是通过将所有依赖子项放在单独的查询中并删除它来解决这个问题。只是删除父项并没有从数据存储中删除从属子项。

这是使用setAncestor()函数

完成的
    // delete all children phrases

    Query phrase = new Query("Phrase");
    phrase.setAncestor(parentKey);
    results = datastore.prepare(phrase).asList(FetchOptions.Builder.withDefaults());
    for (Entity result : results)
        datastore.delete(result.getKey());