2014-10-19 16 views
7

Aşağıdaki mirasım var.Objectify'da basamaklı silme nasıl uygulanır?

grandparent -> Veli -> Çocuk

Veli ve Çocuk orada ebeveyn ilişkisi oluşturmak için @Parent Ref<GrandParent> ve @Parent Ref<Parent> kullanın.

GrandParent için basamaklı bir silme yapmanın iyi bir yolunu bulmaya çalışıyorum.

Elbette bütün çocukları yükleyebilirim, onlardan anahtarlar üretebilir ve anahtarla silebilirim. Bu çok verimsiz görünüyor. Ebeveyn tarafından sorgulayabileceğim ve sorgu sonuçlarını tam getirmeyi yapmadan anahtarlar listesine dönüştürebilen bir şey var mı?

Herhangi bir düşünce veya üçüncü taraf kitaplığı kabul edilir.

cevap

8

, çocukları sorgulamak onların varlığı getirilemiyor ve sonra teker teker silmek olabilir, ama burada ediyorum Bunu yapmak için bulduğum en temiz yol.

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

entityKey burada Silmek istediğiniz varlığın anahtarıdır

  • bu olursa olsun, kendi türlerini çocukların herhangi bir düzeyde idare edecek (her ihtimale karşı bariz değildi). Bir aramanın kadar ucuz
  • nedeniyle bu benim için çalıştı ancak sorgu bir anahtar kullanımı keys()
+1

Merhaba Marc, sayesinde almak için gidiyoruz olarak. Ancak, küçük not, entityKey'de ikinci silme çağrısına ihtiyacınız yoktur. Ofy() için dokümanlar, üst öğenin anahtarlar listesine ekleneceğini ve bu nedenle de ilk aramanın da sileceğini belirtir: Sonuç, sonuçta, yalnızca, atadaki atalarına sahip nesneler için ayarlanır. Anında ebeveyn olmak gerekmez. Belirtilen atanın kendisi sonuç kümesine dahil edilir (eğer varsa). – Pega88

+0

@ Pega88 "Belirtilen atanın kendisi sonuç kümesine dahil edilecektir" ifadesi Objectify 5 belgelerine eklenmiş gibi görünüyor. Güzel bul! Teşekkürler, Objectify v5 kullanıyorum. –

+0

HI, bu kod, çocukların sayısına bakmaksızın doğru bir şekilde işlev görecek mi? Çok sayıda çocuğa sahip olmak sorun olur mu? – Sreekanth

8

Buradaki sorun, Google Datastore'un gerçekten ilişkisel bir veritabanı olmamasıdır. Bu bir anahtar-değer deposudur, bu yüzden 3 varlığı birbirine bağlayan çok fazla bir şey değil. Bu, basamaklı bir silme için gerçek bir yol olmadığı anlamına gelir. Bu itibarla

, en iyi bahis Michael söylediklerini, (iyi bir örnek here bulunabilir) Temelde