如何确保我的实体永远不会成为孤儿?

时间:2016-05-17 17:58:31

标签: google-app-engine app-engine-ndb webapp2 google-cloud-datastore

有时,您创建一个应该存在于另一个实体中的实体类型。但是,如果它变成孤儿,它将没有理由再存在于数据存储区中。

  

What happens to child datastore objects after deleting the ancestor?

     

根据上面的链接,

     
      
  1. “删除祖先时不会删除子实体”
  2.   
  3. “child_entity.key.parent()。get()将返回None。”
  4.   

如果我删除祖先,孩子将没有父母,使其成为孤儿。

这是一个问题,因为它没有理由再留在数据存储区中了。

有没有办法确保数据库中永远不会发生这种情况?

我能想到的可能解决方案是:

  1. 常规运行宏以删除孤儿
  2. 尝试清理代码/清除可能导致我的孩子变成孤儿的错误
  3. 但是,我希望有一个更具编程性的正确解决方案,比如属性或属性,可以设置为确保父(key)永远不会指向不存在的实体。 (也就是在删除祖先时自动删除实体)

    有吗? 如果是,那是什么? 如果不是,为什么不呢?

1 个答案:

答案 0 :(得分:2)

子实体可以从不成为根实体,因为它继续具有相同的父键,即使父项已被删除(或从未存在)。

由于父密钥嵌入在实体的密钥中,因此在实体的生命周期内无法更改实体的父密钥。

至于删除实体时自动删除实体的后代 - 没有这种方法。但它可以以编程方式实现,请参阅How to delete an entity including all children