Thanks for the clarification, I (mis)understood what was RefreshQuery().
If I understand well "invalidating" means that it will not refresh the
cached relationships but will only detect the added/removed relationships ?
So the only way (without prefetching) to _fully_ update the
relationships of an object is to :
1) RefreshQuery() -> update the root object and invalidate it's
relationships so it will detect the relationship adding/removal the on
next access. (but will not refresh the relationships values)
2) Use RelationshipQuery() to refresh the values of the already cached
relationships.
Is my understanding OK ?
Thanks.
Laurent.
Andrus Adamchik a écrit :
From your description I don't think there's a problem with either.
RelationshipQuery is used for internal Cayenne purposes and by itself
will not update the root object, just fetch a list of related objects.
RefreshQuery updates the root object, not the related objects.
Andrus
On Jun 17, 2009, at 3:50 PM, lmarc...@smausa.com wrote:
Sure I will give it a try !
I will try to modify some Cayenne unit tests to reproduce the problem
I have with RefreshQuery and RelationshipQuery.
Thanks.
Laurent.
Andrus Adamchik a écrit :
Hmm... wonder if the PREFETCH LIMITATION warning is only applicable
to the default disjoint prefetches in 3.0. I have a feeling this
type of prefetching should work with joint prefetches since the day
when we started using OUTER JOINs for them. Could you give it a try?
Andrus
On Jun 11, 2009, at 8:08 PM, lmarc...@smausa.com wrote:
Hello all !
I have currently a big problem refreshing my relationships with
cayenne 3.0M6 (tested with M5 too).
I have a table JOB with some extended/dynamic properties and
another related JOB_AUX table (kinda key/value pair table). So
there is a to-many relationship between JOB->JOB_AUX with the flag
"To Dep PK" set.
In my JOB editor I display all the extended properties (JOB_AUX),
and I used to use the JOB.addPrefetch(related_JOB_AUX) to ensure
that the JOB and it's relationships are fresh each time I fetch a
job in the editor. I had a problem one day with :
PREFETCH LIMITATION:
To-many relationships should not be prefetched if a query qualifier
can
potentially reduce a number of related objects, resulting in incorrect
relationship list.
So I removed the prefetch and tried another way : In my editor I
need fresh data so I used RefreshQuery(JOB) each time a job is
selected to be sure that the related JOB_AUX will be fresh, but it
does not work.
The funny thing is that :
- RefreshQuery(JOB) does not see when a value _change_ in the
JOB_AUX table, but works when a value is _added_ or _removed._
- I tried with RelationshipQuery(JOB, related_JOB_AUX, true) but it
only works when a value is _changed_ in the JOB_AUX table it does
not when a value is _added_ or _removed._
So I can make my editor work when I use a combination of these two
queries on the JOB to have fresh data.
Is this a bug ? do you have a Cayenne test case with an embedded
database that I can use to reproduce this case ?
Thanks.
Laurent Marchal.