Nevermind this question - it turned out it was because the Locator for the surrounding EntityProxy was one class, but the fetch/save methods were a different Locator. The default find() method for this EntityProxy was not filling in some @Transient fields that the regular fetch() method was, so the comparison happening a persistence time was comparing mismatched EntityProxies.
I don't know why this would cause the deserialized class to contain an empty member, but I suppose that if the find() method on the Locator sees a member as empty, it is assuming that is newer than the changes made on the client side and overriding them - unsure on the mechanics of that. Anyway, I have fixed my code, and it now works. - Tim -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. For more options, visit https://groups.google.com/groups/opt_out.