I have the following heriacy.
GrandParent --> Parent --> Child
Parent and Child use @Parent Ref<GrandParent>
and @Parent Ref<Parent>
to create there parent relationship.
I am trying to come of with a good way to do a cascading delete for GrandParent
.
I of course I could load all the children, generate keys from them and delete by key. This seems terribly inefficient. Is there something where I could query by parent and turn the query results into a list of keys without having to do the full fetch?
Any thoughts, or third party libraries welcome.
Basically, what Michael said, but here is the cleanest way I have found to do it.
ofy().delete().keys(ofy().load().ancestor(entityKey).keys().list()); // ancestor included
entityKey here is the key of the entity you want to delete (just in case that wasn't obvious)
keys()
The issue here is that the Google Datastore is not really a relational database. it's a key-value store, so it's not so much truly connecting the 3 entities so much as just including references to each other. That means that there's no real way for a cascading delete.
As such, your best bet would be to query the children, fetch their entities, and then delete them one at a time (a good example can be found here)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With