As you know, I'm not fond of the non-object style of query update, and there are cases where you want to do a bulk update efficiently in the datastore, but SQL just doesn't capture the object mapping that is used in the rest of the application.

So what about defining a query closure, that is, declare a set of statements that is executed for each qualifying instance that satisfies the filter.

This could execute in memory for memory collections, or in the datastore for non-instantiated collections. For portability we need to define the closure in terms that can be mapped directly to SQL.

For example,

PERFORM salary *= 1. + :percent; lastSalaryAdjustment = :date FROM Employee WHERE rating == :rating

Query q = pm.newQuery(Employee, "rating > :rating");
q.setPerform("salary *= 1.06; lastSalaryAdjustment = :date");
q.execute(.06, new Date(), 7);


Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:[EMAIL PROTECTED]
P.S. A good JDO? O, Gasp!

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to