Re: RefreshQuery not supports insert/delete?

From: Andrey Razumovsky (razumovsky.andre..mail.com)
Date: Wed Jun 25 2008 - 03:50:10 EDT

  • Next message: Andrus Adamchik: "Re: RefreshQuery not supports insert/delete?"

    Hi Marcin, thanks for your answer!

    I tried with def strategy (NO_CACHE) or SHARED_CACHE - that makes no
    difference. But anyways, I definitely want my relationships be
    refreshed without any more SelectQueries, i.e. objects in memory be
    invalidated automatically.
    For sure, b) and Ó)
    will work - this is roughly the same as restarting the client. I
    haven't tried a), but this is no better than my workaround because I
    need to manually
    specify objects for refresh. What I wish is all objects *with their
    rels* be refreshed when I perform full
    RefreshQuery() [no parameters here].
    Still, there's some debate about how this could be done,
    because invalidating all rels will greatly decrease performance (I feel this
    event if I manually invalidate three
    ObjRelationships) and otherwise - how to check, which relationshps are
    to be invalidated (i.e. which rows were inserted/deleted into
    database).
    Current client implementation, as long as I understood, just updates already
    loaded objects, walking along using visitToOne() and visitToMany() methods.

    About your suggestion, definitely I would want to use registeredObjects()
    instead of uncommitedObjects(), because I don't know which objects (rels)
    were modified behind the scenes. And I really want toMany relationships be
    refreshed, so my workaround will go, I only need to make it more generic.

    Thanks,
    Andrey

    2008/6/25, Marcin Skladaniec <marcin@ish.com.au>:
    >
    > Hi
    >
    > This was something I reported before , but I cannot find the message
    > anymore.
    > Are you using caching ? what type ? are you using cache keys ?
    >
    > Try:
    > a) new RefreshQuery(artist)
    > b) do a query in new context
    > c) do a query in new context with no caching.
    >
    > In our setup we have overriden the CayenneContext commitChanges and
    > performQuery methods.
    > The latter attaches cache keys based on the query object, the former
    > executes RefreshQuery(String[] cacheKeys) based on uncommittedObjects()
    >
    > It does help in most occasions, but still getting counts of toMany
    > relationships is not refreshed.
    >
    > Marcin
    >
    > On Tue, 24 Jun 2008 14:37:43 +0400
    > "Andrey Razumovsky" <razumovsky.andrey@gmail.com> wrote:
    >
    >> Hi!
    >>
    >>
    >> I can't figure out how to make the refreshing query work with inserting or
    >> deleting rows in database. For instance:
    >>
    >>
    >> Artist a = ...
    >>
    >> assert a.getPaintingsArray().size() == 0;
    >>
    >>
    >> //here is direct insert into database a painting of artist a (artistid=
    >> a.id
    >> )
    >>
    >>
    >> RefreshQuery refresher = new RefreshQuery();
    >>
    >> context.performGenericQuery(refresher);
    >>
    >>
    >> assert a.getPaintingsArray().size() == 1; //that's false
    >>
    >>
    >>
    >> Everything works perfect when I sql-update in database. When i sql-delete,
    >> i do also get an exception like this:
    >>
    >> org.apache.cayenne.FaultFailureException: [v.3.0M4 May 18 2008 16:32:02]
    >> Error resolving fault, no matching row exists in the database for
    >> ObjectId:
    >> <ObjectId:Apkforecast, apkforecastid=3>
    >>
    >> at org.apache.cayenne.BaseContext.prepareForAccess(BaseContext.java:100)
    >>
    >> at com.nic.rainbow.data.auto._Apkforecast.getDate(_Apkforecast.java:29)
    >>
    >> ...and so on
    >>
    >> when i try to iterate through related array
    >>
    >>
    >> I'm using ROP if that helps. By the way, when i restart client, the data
    >> becomes correct, so i assume everything has changed correctly on a server.
    >>
    >> If that's not supported, can you give me some advice to manually refresh
    >> the
    >> desired relationships?
    >>
    >>
    >> Thanks,
    >>
    >> Andrey
    >>
    >
    >



    This archive was generated by hypermail 2.0.0 : Wed Jun 25 2008 - 03:50:44 EDT