【问题标题】:How to ensure that my entity will never be an orphan?如何确保我的实体永远不会成为孤儿?
【发布时间】:2016-09-13 23:23:13
【问题描述】:

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

What happens to child datastore objects after deleting the ancestor?

根据上面的链接,

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

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

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

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

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

  1. 定期运行宏以删除孤儿
  2. 尝试清理代码/清除可能导致我的孩子变成孤儿的错误

但是,我希望有一个更以编程方式正确的解决方案,例如可以设置的属性或属性,以确保我的父(键)永远不会指向不存在的实体。 (也就是在删除祖先时自动删除实体)

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

【问题讨论】:

  • 您可能被某些东西误导了,将实体作为孤儿或作为根实体并没有错...
  • 我了解当实体成为孤儿时没有错误。但是,问题在于,有时您没有任何理由将其保存在数据存储中。

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


【解决方案1】:

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

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

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

【讨论】:

  • 好的,谢谢您的信息!为了清楚起见,我更改了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 2020-11-02
  • 2015-09-15
相关资源
最近更新 更多