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

时间:2014-10-19 20:32:16

标签: google-cloud-datastore objectify

我有以下的嗜好。

GrandParent - >家长 - >子

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

我正试图为GrandParent做一个级联删除的好方法。

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

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

2 个答案:

答案 0 :(得分:9)

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

ofy().delete().keys(ofy().load().ancestor(entityKey).keys().list()); // ancestor included

entityKey 这里是您要删除的实体的密钥(只是在不明显的情况下)

  • 这将处理任何级别的孩子,无论他们的类型如何。
  • 由于使用了仅限密钥查询而导致的电话费用便宜keys()

答案 1 :(得分:8)

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

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