I use the low-level datastore to do the delete by keys. On Tue, Aug 2, 2011 at 10:52 AM, Carter Maslan <[email protected]> wrote:
> thanks; what delete do you use? > It looked like deletePersistentAll() accepted only entities (rather than > key values) > > > On Tue, Aug 2, 2011 at 9:46 AM, Stephen Johnson <[email protected]>wrote: > >> Change your query to something like this: >> >> Query query = pm.newQuery("select ek from " + UploadedContent.class >> .getName()); >> >> Where "ek" is the entity key name you use in you JDO class. For example, >> mine is defined like the following: >> >> @PrimaryKey >> >> @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) >> >> @Extension(vendorName="datanucleus", key="gae.encoded-pk", value= >> "true") >> >> private String ek; >> >> Then, just query for the keys and do a batch delete on the keys. Right now >> you're pulling in all the entity data and then deleting the entities which >> is unnecessary and will slow you do a lot. >> >> Stephen >> CortexConnect (cortexconnect.appspot.com) >> >> On Tue, Aug 2, 2011 at 12:17 AM, Carter <[email protected]> wrote: >> >>> Is this the most efficient code for bulk delete? >>> >>> Is there a "SELECT __key__" technique that's faster? >>> >>> This currently deletes 100 at a time, but it's slow. >>> >>> >>> public long deleteBefore(Date d, long maxRecords) >>> throws DaoException { >>> >>> PersistenceManager pm = pmf.getPersistenceManager(); >>> Query query = pm.newQuery(UploadedContent.class); >>> query.setFilter("dateCreated < dateCreatedParam"); >>> query.declareParameters("Date dateCreatedParam"); >>> query.declareImports("import java.util.Date;"); >>> if (maxRecords >= 0) { >>> query.setRange(0, maxRecords); >>> } >>> >>> List<UploadedContent> entities = new >>> ArrayList<UploadedContent>(); >>> try { >>> entities = (List<UploadedContent>) >>> query.execute(d); >>> pm.deletePersistentAll(entities); >>> } catch (Exception e) { >>> log.log(Level.SEVERE, e.getMessage(), e); >>> throw new DaoException(e); >>> } finally { >>> query.closeAll(); >>> pm.close(); >>> } >>> return entities.size(); >>> } >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "Google App Engine" group. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]. >>> For more options, visit this group at >>> http://groups.google.com/group/google-appengine?hl=en. >>> >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "Google App Engine" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]. >> For more options, visit this group at >> http://groups.google.com/group/google-appengine?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/google-appengine?hl=en. > -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
