如何在Objectify中实现级联删除?

Mar*_* M. 7 objectify google-cloud-datastore

我有以下的嗜好.

GrandParent - >父母 - >孩子

父母和孩子使用@Parent Ref<GrandParent>@Parent Ref<Parent>创建父母关系.

我试图用一个很好的方法来进行级联删除GrandParent.

我当然可以加载所有孩子,从他们生成密钥并按键删除.这看起来非常低效.是否存在我可以通过父查询并将查询结果转换为键列表而无需进行完整提取的内容?

欢迎任何想法或第三方图书馆.

Mar*_* M. 9

基本上,迈克尔说,但这是我发现做的最干净的方式.

ofy().delete().keys(ofy().load().ancestor(entityKey).keys().list()); // ancestor included
Run Code Online (Sandbox Code Playgroud)

这里的entityKey是你要删除的实体的关键(以防万一)

  • 这将处理任何级别的孩子,无论他们的类型.
  • 由于使用了一个仅限密钥的查询,因此您将获得一个便宜的呼叫 keys()


小智 8

这里的问题是Google Datastore实际上不是关系数据库.它是一个键值存储,所以它并不是真正将3个实体连接起来,而只是包含对彼此的引用.这意味着没有真正的级联删除方式.

因此,您最好的选择是查询孩子,获取他们的实体,然后一次删除一个(这里可以找到一个很好的例子)