Using SQLTemplate to prefetch relationships.

From: Michael Shea (mik..itido.com)
Date: Mon Aug 25 2008 - 14:50:21 EDT

  • Next message: Mike Kienenberger: "Re: Using SQLTemplate to prefetch relationships."

    Hi,

    I am attempting to use a SQLTemplate to execute a query and prefetch
    relationships. I have been unable, so far, to get any relationships that
    are one-to-many to be prefetched. Is there any further documentation
    about prefetching dependencies with SQLTemplate? So far, all I have seen
    is this:

    http://cayenne.apache.org/doc/prefetching.html

    This basically just indicates that SQLTemplate uses JOINT semantics to
    prefetch, which makes sense. Presumably, the query must manually
    retrieve all the desired relationships, and I should call
    template.addPrefetch(...) for every relationship I want retrieved?

    How should I retrieve the actual properties of the relationship objects?
    So far, I have been using:

    select ...
    #result('granteeId' 'String' )
    ...

    where granteeId is a property of an object related to the root object of
    the query.

    However, I get back errors like this:

    org.apache.cayenne.CayenneRuntimeException: [v.2.0.4 October 8 2007]
    Null value for 'granteeId'. Snapshot:
    org.apache.cayenne.DataRo..61aef[values={permissionItemId=aa869cb60ca18870:70f1774a:11bfb2de554:-8000,
    granteeId=null, permissionType=null, isGrantable=null},
    version=-9223372036854775793, replaces=-9223372036854775808]. Prefix: null
        at
    org.apache.cayenne.access.ObjectResolver.createObjectId(ObjectResolver.java:278)
       ...
      
    When I run the query myself, manually, I can see that the value of
    granteeId returned by the query isn't null.

    I have also tried calling template.setFetchingDataRows( false ) and then
    calling context.objectsFromDataRows() on the result of executing the
    query, but so far that has just generated me one object per datarow (so
    if a root object has 4 related dependent objects, I end up getting back
    4 distinct root objects, rather than 1 root with 4 objects in the
    appropriate relationship).

    Any suggestions? If this is unclear, please let me know and I will try
    to clarify =)

    Oh, I am using version 2.0.4 of Cayenne.

    Thanks!

    Mike Shea.



    This archive was generated by hypermail 2.0.0 : Mon Aug 25 2008 - 14:51:18 EDT