> The problem seems related to the fact that committing the changes regarding
> the newly created object doesn't result in a refresh of the Cayenne cache,
> and so the very same result retrieved for List a is returned also for List
> b.
Correct. There's no good generic algorithm to efficiently detect which cached
lists should be flushed on commit, so yes, commits have no effect on query
cache by default.
> Is there any setting or configuration that I need to enable?
> Is there any command that I need to issue in order to invalidate the
> preiovus results of the cache in this example?
I would recommend using "cache groups" to categorize queries -
query.setCacheGroups("somegroup"). Then you can setup your own cache
invalidation calling queryCache.removeGroup(..) when certain types of objects
are committed.
In Cayenne 3.1 we went a step further, and created @CacheGroups annotations and
CacheInvalidationFilter that allow to do the above declaratively. E.g.:
@CacheGroups("abc")
class Artist extends _Artist {}
The above declaration would ensure that all cached queries that used "abc"
cache group are flushed when any Artist object is committed.
Andrus
On May 23, 2012, at 8:07 AM, cghersi wrote:
> Hi all,
>
> I'm trying to use the query cache of Cayenne 3.0.
>
> My code snippet for the typical query is:
>
> private List query(Expression qualifier) {
> DataContext context = config.getDomain("MyDomain").createDataContext();
> SelectQuery select = new SelectQuery(MyClass.class, qualifier);
> select.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
> return context.performQuery(select);
> }
>
> With this code, if I call my query() method in the following way List b is
> empty:
> Expression qualifier = ... //my filters
> List a = query(qualifier);
>
> DataContext context = config.getDomain("MyDomain").createDataContext();
> //this is another context with respect to the one used in query()
> MyClass newObj = context.newObject(MyClass .class);
> // set props of newObj
> context.commitChanges();
>
> List b = query(qualifier); //the same qualifier resulting in List a
>
> The problem seems related to the fact that committing the changes regarding
> the newly created object doesn't result in a refresh of the Cayenne cache,
> and so the very same result retrieved for List a is returned also for List
> b.
>
> Is there any setting or configuration that I need to enable?
> Is there any command that I need to issue in order to invalidate the
> preiovus results of the cache in this example?
>
> Thank you very much
> Best
> cghersi
>
>
>
> --
> View this message in context:
> http://cayenne.195.n3.nabble.com/Cayenne-cache-strategy-tp4008506.html
> Sent from the Cayenne - User mailing list archive at Nabble.com.
>