cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <>
Subject Re: Getting null instead of the actual value
Date Fri, 16 Sep 2011 19:16:40 GMT
One side of prefetching is saving us uneeded queries, when we know upfront which related objects
we need in addition to the main query result. This is the angle shown in the docs where prefetching
is presented as a performance optimization tool. 

But there is another side of it, which is just as important. It is about fine-grained control
of refreshing parts of the object graph already in memory. When a query is run, Cayenne can't
automatically refresh all objects directly or indirectly connected to the query result objects,
as it would cause a massive fetch. With prefetching Cayenne knows how much of the object graph
we want to refresh.

So I don't find the result all that surprising. (Although if things happen in the same JVM
I am still surprised the relationship isn't refreshed via Cayenne cross-context event mechanism.
This could be a race condition actually, as events are delivered asynchronously)


On Sep 16, 2011, at 10:01 PM, Christian Grobmeier wrote:

> I have not had duplication issues so far. But I will double check now.
> I added this code b/c of the problems with the null values, so it isnt
> the root cause for my problem.
> At the moment it still looks good. It seems that the prefetch helped.
> I am very puzzled about it :-)
> On Fri, Sep 16, 2011 at 8:30 PM, Michael Gentry <> wrote:
>> I seem to recall doing a setX() followed by an addToY() causes a
>> duplicate Y to be added.  I'd have to double check this, but that is
>> my recollection.
>> On Fri, Sep 16, 2011 at 2:19 PM, Andrus Adamchik <> wrote:
>>>> but may cause duplication issues for addToY().
>>> I hope it doesn't. But since I am trained to just set the rel in one direction,
I may not be aware of the issue.
>>> On Sep 16, 2011, at 9:12 PM, Mike Kienenberger wrote:
>>>> On Fri, Sep 16, 2011 at 4:22 AM, Christian Grobmeier
>>>> <> wrote:
>>>>> userRoles.setUser(user);
>>>>> userRoles.setRole(role);
>>>>> user.addToUserRoles(userRoles);
>>>>> role.addToRolesToJoin(userRoles);
>>>> Again, unless, you've specifically made both relationships
>>>> unidirectional (the default is bidirectional), you are actually
>>>> setting both sides of the relationship twice.   Not an issue for a
>>>> SetX(), but may cause duplication issues for addToY().
> -- 

View raw message