Thanks Andrus. Setting the semantics to 
PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS made the relationship resolve 
properly (and modified the SQL to use a join rather than a separate fetch for 
fetching the products). Looks like a bug, shouldn’t I report this?

And I’m generating properties in my template—I’m just using slightly modified 
templates for easier conversion of my old EOF code.

Cheers,
- hugi

// Hugi Thordarson
// http://www.loftfar.is/ <http://www.loftfar.is/>
// s. 895-6688



> On 13. maí 2015, at 09:00, Andrus Adamchik <and...@objectstyle.org> wrote:
> 
> Actually it is performed. It is a "disjoint prefetch", so a second query is 
> generated. I still don't see any clues as to why the prefetch is not working, 
> so here is a purely random suggestion: you can try other prefetch strategies 
> and see if that makes any difference. E.g.:
> 
>  query.addPrefetch( ProductLink.PRODUCT_KEY 
> ).setSemantics(PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
> 
> or 
> 
>  query.addPrefetch( ProductLink.PRODUCT_KEY 
> ).setSemantics(PrefetchTreeNode.DISJOINT_BY_ID_PREFETCH_SEMANTICS);
> 
> (BTW, looks like you are not using 4.0 cgen templates that would generate 
> Property objects for each property?)
> 
> Andrus
> 
>> On May 13, 2015, at 11:48 AM, Hugi Thordarson <h...@karlmenn.is> wrote:
>> 
>> Hi Andrus.
>> Sure, here it is. Looks like a fetch is never performed for the “products” 
>> relationship…
>> 
>> https://gist.github.com/hugith/6d0ccde4aa8877e26454
>> 
>> Thanks!
>> - hugi
>> 
>> // Hugi Thordarson
>> // http://www.loftfar.is/ <http://www.loftfar.is/>
>> // s. 895-6688
>> 
>> 
>> 
>>> On 13. maí 2015, at 08:36, Andrus Adamchik <and...@objectstyle.org> wrote:
>>> 
>>> Can you post the generated SQL by any chance? Also is there anything 
>>> special about the relationship, or is it a simple to-one ?
>>> 
>>> Andrus
>>> 
>>>> On May 12, 2015, at 6:02 PM, Hugi Thordarson <h...@karlmenn.is> wrote:
>>>> 
>>>> Hi all.
>>>> 
>>>> I have a weird case (using Cayenne 4.0-M2) where if I add a prefetch to a 
>>>> relationship, the relationship is nullified (will contain nothing). 
>>>> Consider the following code:
>>>> 
>>>> SelectQuery<ProductLink> q = SelectQuery.query( ProductLink.class );
>>>> q.addPrefetch( ProductLink.PRODUCT_KEY ); // <---- This line is the culprit
>>>> 
>>>> List<ProductLink> links = oc().select( q );
>>>> 
>>>> for( ProductLink link : links ) {
>>>>    System.out.println( link.product() );
>>>> }
>>>> 
>>>> Without the prefetch, the “product” relationship is properly populated for 
>>>> each “ProductLink” object, but if I include the prefetch, the relationship 
>>>> is always null.
>>>> 
>>>> Any ideas?
>>>> 
>>>> Cheers,
>>>> - hugi
>>> 
>> 
> 

Reply via email to