Getting a weird error on java appengine code that used to work fine
(nothing has changed but the data in the datastore).

I'm trying to iterate over the results of a query and change a few
properties of the entities. The query does return a set of results,
however, when I try to access the first result in the list, it throws
an exception when trying to access any of its properties (but its
key). Here's the exception:

    org.datanucleus.state.JDOStateManagerImpl isLoaded: Exception
thrown by StateManager.isLoaded
    Could not retrieve entity of kind OnTheCan with key
OnTheCan(3204258)
    org.datanucleus.exceptions.NucleusObjectNotFoundException: Could
not retrieve entity of kind OnTheCan with key OnTheCan(3204258)
        at
org.datanucleus.store.appengine.DatastoreExceptionTranslator.wrapEntityNotFoundException(DatastoreExceptionTranslator.java:
60)

And here is my code:

    PersistenceManager pm = PMF.get().getPersistenceManager();
    Query query = null;
    List<OnTheCan> cans;
    query = pm.newQuery("SELECT this FROM " + OnTheCan.class.getName()
+ " WHERE open == true ORDER BY onTheCanId ASC");
    query.setRange(0, num);
    cans = (List<OnTheCan>) query.execute();
    for (OnTheCan c : cans)
    {
        System.err.println(c.getOnTheCanId()); // this works fine!
getting the key works
        c.setOpen(false); // failure here with the above exception
        c.setAutoClosed(true);
        c.setEndTime(new Date(c.getStartTime().getTime() + 600000/
*10*60*1000*/));
    }
    pm.close();

The code throws the exception when trying to execute c.setOpen(false)
- thats the first time I'm accessing or setting a property that isnt
the key. So it seems there is a phantom entity in my datastore with
key 3204258. THis entity doesn't really exist (queried the datastore
from admin console) but for some reason its being returned by the
query. Could my data store be in an inconsistent state?

I've managed the following workaround by placing it as the first line
in my for loop. Clearly an ugly hack:

        if (c.getOnTheCanId() == 3204258) {
                continue;
        }

Any ideas?

-- 
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