> ATTENTION: Meta-data warning for com.testgae.xp.domain.B._cUpdates: > The datastore does not support joins and therefore cannot honor > requests to place child objects in the default fetch group. The field > will be fetched lazily on first access. ...
Not sure I like this one; if a user defines that a field should be fetched eagerly, it shouldn't be put off to when the implementation (GAE/J plugin) feels like it. It may have unknown consequences at commit/detach time. One for the GAE/J guys to address. What I'd expect to happen if the datastore can't do it in one call is for the GAE/J plugin to retrieve all that was required in as many datastore calls as necessary, and by all means put a log message in saying that this couldn't be done in a single call ... but they must respect the users fetch group settings. > Caused by: java.lang.IllegalArgumentException: can't update the same > entity twice in a transaction or operation > at > com.google.appengine.api.datastore.DatastoreApiHelper.translateError > (DatastoreApiHelper.java:33) > at com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall > (DatastoreApiHelper.java:60) > at com.google.appengine.api.datastore.DatastoreServiceImpl$2.run > (DatastoreServiceImpl.java:173) > at > com.google.appengine.api.datastore.TransactionRunner.runInTransaction > (TransactionRunner.java:30) > at com.google.appengine.api.datastore.DatastoreServiceImpl.put > (DatastoreServiceImpl.java:161) > at com.google.appengine.api.datastore.DatastoreServiceImpl.put > (DatastoreServiceImpl.java:141) > at com.google.appengine.api.datastore.DatastoreServiceImpl.put > (DatastoreServiceImpl.java:137) > at > org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.put > (RuntimeExceptionWrappingDatastoreService.java:105) > at org.datanucleus.store.appengine.DatastorePersistenceHandler.put > (DatastorePersistenceHandler.java:172) > at org.datanucleus.store.appengine.DatastorePersistenceHandler.put > (DatastorePersistenceHandler.java:124) > at org.datanucleus.store.appengine.DatastorePersistenceHandler.put > (DatastorePersistenceHandler.java:119) > at > org.datanucleus.store.appengine.DatastorePersistenceHandler.updateObject > (DatastorePersistenceHandler.java:492) > at org.datanucleus.state.JDOStateManagerImpl.flush > (JDOStateManagerImpl.java:4576) Ok, so the GAE/J plugin flushes any changes and the BigTable datastore has some limit on not updating the same object more than once in the same transaction. Why not split it down into a simple testcase for Google, showing that there is only one change to each entity, and then they can identify why they are trying to update it twice. -- 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 [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-java?hl=en.
