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.

Reply via email to