I couldn't agree more. Better to to use direct datastore API for this entity, as programmer gets true benefit if schema less.
On Jul 7, 10:55 pm, Nichole <[email protected]> wrote: > To update your existing entities to the new entity schema, you would > need to rewrite your existing entities (create new w/ same fields and > delete old). > > To find the existing older entities, you could use the low level API > (DatastoreService) to fetch Entity > instances for your entity Kind and then use > getProperty(java.lang.String propertyName) > to return an Object which you would check the instanceOf, and then > create the new, delete, etc... > > Note that you could do this on a "need only" basis, that is as each > older entity is > fetched. > > FetchOptions fetchOptions = FetchOptions.Builder.withDefaults(); > QueryResultList<Entity> results = > datastore.prepare(yourQuery).asQueryResultList(fetchOptions); > for (Entity entity : results) { > Object cf = entity.getProperty("ID"); > if (cf instanceOf Integer) { > ... > } > > } > > On Jul 7, 8:40 pm, Jamie <[email protected]> wrote: > > > > > > > > > I am indeed using JDO so I'm kinda bummed that a simple schema change > > like this is causing problems. > > > Haven't used Objectify before but it sounds like it might do what I > > need. I'm simply changing the type of a field/property (not part of > > the key) from Integer to String. The issue is I have a LOT of > > existing entries, so I need to figure out the best way to store new > > entities using String for that property, but still be able to read old > > entities that have that value stored as an Integer. > > > Sounds like Objectify might be my only choice? I had another idea > > which involved using a new property with type String. That way, new > > entities would have the new property filled, while old entities would > > have the original property filled. The application code would need to > > handle this. Kinda ugly and hackish though. > > > On Jul 6, 4:34 pm, Jeff Schnitzer <[email protected]> wrote: > > > > On Wed, Jul 6, 2011 at 12:56 PM, jMotta <[email protected]> wrote: > > > > * > > > > * > > > > *Jeff*, > > > > > You've said: "Objectify will let you change the field type to a String > > > > and > > > > do the right thing out of the box.", how? > > > > > I know that's possible through @AlsoLoad annotation to override the > > > > default > > > > behavior of binding properties based on the member name. But what I > > > > understood about his need is that actually he have entities whose the > > > > property names are equals but with different object types as values. > > > > So, the > > > > only class shared in the String vs Long hierarchy will be Object. > > > > The conversion process will merrily convert just about anything to a > > > String. > > > So going from Long -> String is easy. The other way 'round, you would > > > need > > > to use the @AlsoLoad mechanism. > > > > Jeff -- 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.
