I'm happy to add this to the official docs if it isn't clear. I think this
makes sense under the JPA section or the section about ancestor queries.

On Sun, Nov 22, 2009 at 11:24 PM, Rusty Wright <[email protected]>wrote:

> There are way too many hidden secrets, like this parent-pk query, that are
> buried throughout the App Engine documentation.  It would really be nice if
> these things were more clearly documented.
>
>
> Ikai L (Google) wrote:
> > Hey Todd,
> >
> > There are a few different things you can do here:
> >
> > 1. Use the parent-pk filter. It looks something like this:
> >
> > query = pm.newQuery("select from Account " +
> >
> >                                 "where parent-pk == keyParam " +
> >                                 "parameters Key keyParam");
> >
> >
> > There's a groups thread about this here:
> >
> http://groups.google.com/group/google-appengine-java/browse_thread/thread/97ba3209ec6a65de
> >
> > and the docs are here:
> >
> >
> http://code.google.com/appengine/docs/java/datastore/transactions.html#Using_Transactions(search
> >
> > 2. Use the low-level API.
> >
> > com.google.appengine.api.datastore.Query has a constructor that takes an
> > Ancestor key.
> >
> http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Query.html#Query(com.google.appengine.api.datastore.Key)
> >
> > Hope this helps.
> >
> > On Mon, Nov 16, 2009 at 4:29 PM, Todd Vierling <[email protected]
> > <mailto:[email protected]>> wrote:
> >
> >     Test app to reproduce:
> >
> >     http://ancestortest.latest.duh-test.appspot.com/
> >
> >     Source code:
> >
> >
> http://ancestortest.latest.duh-test.appspot.com/src/ancestortest/AncestorTestServlet.java
> >
> http://ancestortest.latest.duh-test.appspot.com/src/ancestortest/UserAccount.java
> >
> http://ancestortest.latest.duh-test.appspot.com/src/ancestortest/UserAccountModification.java
> >
> >     This sample code basically creates two UserAccount objects and
> >     attaches a UserAccountModification to one of them.  Then, a query
> >     (which, unless the datastore is really slow, should return an empty
> >     list):
> >
> >     =====
> >                Query q = em.createQuery("select m from
> >     UserAccountModification m where m.modTime < :newest and m.owner
> >     = :owner order by modTime desc");
> >                q.setParameter("newest", System.currentTimeMillis() -
> >     10000L);
> >                q.setParameter("owner", user1);
> >                List<UserAccountModification> mods = q.getResultList();
> >     =====
> >
> >     I get the following exception:
> >
> >     javax.persistence.PersistenceException: SELECT FROM
> >     UserAccountModification m WHERE m.modTime < :newest and m.owner
> >     = :owner ORDER BY modTime desc: Key of parameter value does not have
> a
> >     parent.
> >            at
> >
> org.datanucleus.jpa.NucleusJPAHelper.getJPAExceptionForNucleusException
> >     (NucleusJPAHelper.java:264)
> >            at
> org.datanucleus.jpa.JPAQuery.getResultList(JPAQuery.java:179)
> >            at
> >     ancestortest.AncestorTestServlet.doGet(AncestorTestServlet.java:
> >     46)
> >
> >     I must be missing something here.  The docs for GAE talk about
> >     ensuring the use of ancestor filters when inside a transaction, for
> >     instance, and there's the ANCESTOR IS operator in GQL.  However, I
> >     can't seem to figure out how properly to express this in JPQL (as
> >     "ANCESTOR IS" is a syntax error there), and there's no docs that I
> can
> >     find on doing this in JPA.
> >
> >     The query is meant to find UserAccountModification objects all
> >     residing under a given "owner", which happens to be the ancestor of
> >     those objects.  Is there a proper expression for this using JPQL?
> >
> >     --
> >
> >     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]
> >     <mailto:[email protected]>.
> >     To unsubscribe from this group, send email to
> >     
> > [email protected]<google-appengine-java%[email protected]>
> >     
> > <mailto:google-appengine-java%[email protected]<google-appengine-java%[email protected]>
> >.
> >     For more options, visit this group at
> >     http://groups.google.com/group/google-appengine-java?hl=.
> >
> >
> >
> >
> >
> > --
> > Ikai Lan
> > Developer Programs Engineer, Google App Engine
> >
> > --
> >
> > 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]<google-appengine-java%[email protected]>
> .
> > For more options, visit this group at
> > http://groups.google.com/group/google-appengine-java?hl=.
>
> --
>
> 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]<google-appengine-java%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=.
>
>
>


-- 
Ikai Lan
Developer Programs Engineer, Google App Engine

--

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


Reply via email to