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


Reply via email to