yes, the real code below passes the class as part of the getObjectById(),
but the JDO lookup thinks that I'm trying to fetch a different Kind just
because the first characters in the string id are for another Kind.
So the call fails when using the id value:
"agxjYW1sb2d2aWV3ZXJyDwsSB0FwcFVzZXIYybgDDA counter1 2011-07-07"
but works fine with a slight rearrangement of the string elements with the
id value:
"counter1 agxjYW1sb2d2aWV3ZXJyDwsSB0FwcFVzZXIYybgDDA 2011-07-07"
public T get(String id) throws DaoException {
PersistenceManager pm = pmf.getPersistenceManager();
try {
return pm.detachCopy(pm.getObjectById(Counter.class, id));
} catch (JDOObjectNotFoundException jonfe) {
return null;
} catch (Exception e) {
log.log(Level.SEVERE, e.getMessage(), e);
throw new DaoException(e);
} finally {
pm.close();
}
}
the key name is like this:
@Persistent
@Extension(vendorName="datanucleus", key="gae.pk-name", value="true")
private String counter;
On Thu, Jul 7, 2011 at 11:07 AM, Stephen Johnson <[email protected]>wrote:
> I'd suggest posting some real code for us to help you make a determination.
>
> On Thu, Jul 7, 2011 at 11:03 AM, Stephen Johnson <[email protected]>
> wrote:
> > Have you tried using the two parameter getObjectById that takes the
> > JDO entity class type as the first parameter which I would presume
> > (but not verified) then doesn't need to inspect the supplied string to
> > determine the entity kind?
> >
> > On Thu, Jul 7, 2011 at 10:38 AM, Carter <[email protected]> wrote:
> >> This problem is specific to Java JDO implementation.
> >> Do you agree that this should be filed as a bug? (i.e. key names
> >> should be opaque strings rather than interpreted by JDO to determine
> >> entity kind?)
> >>
> >> getObjectById() is using only the first part of the supplied keyString
> >> as the *whole* key in determining the Kind being retrieved.
> >> We had expected it to use the entire keyString - without interpreting
> >> the fact that the first part of the key name contains the keyString of
> >> another Kind of Entity.
> >>
> >> As background, we're using the keyString of one Kind (say, "Bean") as
> >> *part* of the key name for another Kind (say, "Counter").
> >> When using getObjectById(keyString counterName dateString), we get an
> >> exception since the first part of the key name is the keyString of
> >> another Kind.
> >> But when using getObjectById(counterName keyString dateString), we're
> >> fine.
> >> So simply switching the order of the elements of the key name string
> >> is a workaround for this bug that produces this Exception (edited for
> >> clarity):
> >>
> >> Caused by: javax.jdo.JDOFatalUserException: Exception converting
> >> agxjYW1sb2d2aWV3ZXJyDwsSB0FwcFVzZXIYybgDDA counter1 2011-07-07 to an
> >> internal key.
> >> NestedThrowables:
> >> org.datanucleus.store.appengine.FatalNucleusUserException: Received a
> >> request to find an object of kind Counter but the provided identifier
> >> is the String representation of a Key for kind Bean
> >> at
> >>
> org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManager.getObjectById(DatastoreJDOPersistenceManager.java:
> >> 68)
> >>
> >> --
> >> You received this message because you are subscribed to the Google
> Groups "Google App Engine" 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?hl=en.
> >>
> >>
> >
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine" 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?hl=en.
>
>
--
You received this message because you are subscribed to the Google Groups
"Google App Engine" 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?hl=en.