I wasn't aware setting the child objects to Null actually deleted objects - doesn't that just orphan the child objects?
Either way, there should be no real difference in datastore CPU costs. -- Ikai Lan Developer Programs Engineer, Google App Engine Blogger: http://googleappengine.blogspot.com Reddit: http://www.reddit.com/r/appengine Twitter: http://twitter.com/app_engine On Sun, Sep 19, 2010 at 1:07 PM, haole <mejoe...@gmail.com> wrote: > say i have a persistent parent class, Employee, with a collection of > child objects, PhoneNumber: > > @PersistenceCapable(identityType = IdentityType.APPLICATION) > class Employee implements Serializable > { > @PrimaryKey > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > Long id; > > @Persistent(mappedBy = "employee") > List<PhoneNumber> phoneNumbers; > } > > @PersistenceCapable(identityType = IdentityType.APPLICATION) > class PhoneNumber implements Serializable > { > @PrimaryKey > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > Key key; > > @Persistent(mappedBy = "phoneNumbers") > Employee employee; > > @Persistent > Integer phoneNumber; > } > > when deleting all child objects (PhoneNumber), there are two possible > ways to do this: > > (1) set the collection of child objects on the parent object to an > empty collection (or null): > static void deletePhoneNumbers( Long p_employeeId, PersistentManager > p_manager ) > { > Employee l_employee = p_manager.getObjectById( Employee.class, > p_employeeId ); > l_employee.phoneNumbers = new ArrayList<PhoneNumber>(); > p_manager.makePersistent( l_employee ); > } > > or > > (2) delete all child objects belonging to the parent object: > static void deletePhoneNumbers( Employee p_employee, > PersistenceManager p_manager ) > { > Query l_query = p_manager.newQuery( PhoneNumber.class ); > l_query.setFilter( "employee == p_employee" ); > l_query.declareParameters( "Employee p_employee" ); > l_query.deletePersistentAll( p_employee ); > } > > both ways seem to have the same effect. as one might expect, the > collection of child objects in the parent array are removed and the > child objects themselves are removed from the data store. > > my question is: > > as far as hits on the data store (and the quota/fees associated with > those hits) are concerned, which incurs a greater number of calls > against the datastore (and, subsequently, incurs more fees)? > > when you look at what's happening in the low-level API, do both ways > of deleting child objects result in the same number of calls against > the data store or is one way less costly than the other? > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine for Java" group. > To post to this group, send email to > google-appengine-j...@googlegroups.com. > To unsubscribe from this group, send email to > google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/google-appengine-java?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.