|Re: Re: [eclipselink-users] Caching read-all queries|
No, you will only see SQL if the SQL is sent to the database. By default any Query will access the database, where as any find() operation, or ToOne relationship access will first check the object cache. On any primary key (Id) Query, you can configure it using the "eclipselink.cache-usage" query hint to "CheckCacheByPrimaryKey". If the Query returns a single object, you can use "CheckCacheThenDatabase" (you can't use this for a result list as EclipseLink can not know if it has them all in the cache). If you know you have all the objects in the cache, you can use, "CheckCacheOnly". EclipseLink also allows any "NamedQuery" to cache its results. If you re-execute the same NamedQuery with the same parameters, you will get a query cache hit. The query cache is configured on the query using the query hint, "eclipselink.query-results-cache"="true". See, http://www.eclipse.org/eclipselink/api/2.0.1/org/eclipse/persistence/config/QueryHints.html tch wrote: > > I believe even if EL is hitting the cache you'll still see the SQL in the > logs. > > ./tch > > > On Wed, May 19, 2010 at 8:53 PM, Zarar Siddiqi <zarars@xxxxxxxxx> wrote: > >> I've already tried the following: >> >> Session session = >> JpaHelper.getServerSession(em.getEntityManagerFactory()); >> >> ReadAllQuery q = new ReadAllQuery(Person.class); >> q.setJPQLString("SELECT OBJECT(p) FROM Person p"); >> q.addArgument("1"); >> q.addArgument("3"); >> List args = new ArrayList(); >> args.add(activityCode); >> q.cacheQueryResults(); >> q.cacheStatement(); >> q.setQueryResultsCachePolicy(new QueryResultsCachePolicy(new >> TimeToLiveCacheInvalidationPolicy(60000)); >> List list = session.executeQuery(q, args); >> >> Despite this, it still prints the SQL twice in the logs on successive >> calls. This is based on the example shown here: >> >> >> http://wiki.eclipse.org/EclipseLink/Examples/JPA/ORMQueries#A_Simple_ReadAllQuery_Using_JPQL >> >> >> >> >> On Wed, May 19, 2010 at 6:05 PM, Zarar Siddiqi <zarars@xxxxxxxxx> wrote: >> > I'm using 1.2 and have a couple cache related questions. >> > >> > Do read-all queries (ones using getResultList()) always hit the >> database? >> > >> > As I understand the docs, the "CheckCacheThenDatabase" hit only >> > applies to read-object queries (ones using getSingleResult()). In my >> > app, I have a ton of queries that are candidates for caching, but they >> > all use getResultList(). I've set an @Cache(expiry=60000) annotation >> > on those entities and when I execute them, I keep seeing the queries >> > printed in the logs. >> > >> > To me, this isn't the greatest behaviour since I'm executing the exact >> > same query with the exact same parameters. Shouldn't EclipseLink have >> > a way of optimizing this? >> > >> > Thanks, >> > Zarar >> > >> >> >> >> -- >> Zarar Siddiqi >> 416-737-9024 > > ----- http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland http://www.eclipse.org/eclipselink/ EclipseLink , http://www.oracle.com/technology/products/ias/toplink/ TopLink Wiki: http://wiki.eclipse.org/EclipseLink EclipseLink , http://wiki.oracle.com/page/TopLink TopLink Forums: http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink , http://www.nabble.com/EclipseLink-f26430.html EclipseLink Book: http://en.wikibooks.org/wiki/Java_Persistence Java Persistence -- View this message in context: http://old.nabble.com/Caching-read-all-queries-tp28614962p28741730.html Sent from the EclipseLink - Users mailing list archive at Nabble.com.
Back to the top