Re: Relationships refresh possible BUG

From: lmarcha..mausa.com (lmarchal@smausa.com)
Date: Wed Jun 17 2009 - 10:31:21 EDT

  • Next message: Andrus Adamchik: "Re: Relationships refresh possible BUG"

    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, lmarcha..mausa.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, lmarcha..mausa.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.
    >>>>
    >>>
    >>
    >



    This archive was generated by hypermail 2.0.0 : Wed Jun 17 2009 - 10:32:09 EDT