我有以下heriacy。如何在Objectify中實現級聯刪除?
祖父母 - >父 - >兒童
父母與子女使用@Parent Ref<GrandParent>
和@Parent Ref<Parent>
創造有父母的關係。
我想帶一個很好的方式來做一個級聯刪除GrandParent
。
我當然可以加載所有的孩子,從它們生成密鑰並通過鍵刪除。這似乎非常低效。有沒有什麼我可以通過父母查詢並將查詢結果轉換爲密鑰列表,而無需執行完整的提取?
任何想法或第三方庫歡迎。
我有以下heriacy。如何在Objectify中實現級聯刪除?
祖父母 - >父 - >兒童
父母與子女使用@Parent Ref<GrandParent>
和@Parent Ref<Parent>
創造有父母的關係。
我想帶一個很好的方式來做一個級聯刪除GrandParent
。
我當然可以加載所有的孩子,從它們生成密鑰並通過鍵刪除。這似乎非常低效。有沒有什麼我可以通過父母查詢並將查詢結果轉換爲密鑰列表,而無需執行完整的提取?
任何想法或第三方庫歡迎。
基本上,邁克爾說,但在這裏是我找到的最乾淨的方式。這裏
ofy().delete().keys(ofy().load().ancestor(entityKey).keys().list()); // ancestor included
的EntityKey是你要刪除的實體鍵(以防萬一,這是不明顯)
keys()
這裏的問題是Google Datastore不是一個真正的關係數據庫。這是一個關鍵價值的商店,所以它沒有太多的真正連接這三個實體,只是包含了彼此的引用。這意味着沒有真正的級聯刪除方法。
因此,最好的辦法是,查詢孩子,獲取他們的實體,然後將其刪除每次一個(一個很好的例子可以發現here)
嗨馬克, 感謝,這爲我工作。小記,但是,你不需要對entityKey進行第二次刪除調用。 fory()的文檔指出,父項將包含在密鑰列表中,因此也會在第一次調用時被刪除: 將結果集僅限於鏈中某處具有給定祖先 的對象。不需要是直接的父母。指定的祖先本身將包含在結果集中(如果存在)。 – Pega88 2015-06-15 08:04:00
@ Pega88「指定的祖先本身將包含在結果集中」子句似乎已添加到Objectify 5文檔中。很好找!謝謝,我正在使用Objectify v5。 – 2015-06-16 09:00:16
嗨,無論孩子的數量多少,這段代碼能否正常工作?會有大量的孩子成爲問題嗎? – Sreekanth 2016-05-02 13:01:23