Author: stliu
Date: 2010-05-10 21:41:38 -0400 (Mon, 10 May 2010)
New Revision: 19462
Modified:
core/trunk/core/src/main/java/org/hibernate/cache/StandardQueryCache.java
core/trunk/testsuite/src/test/java/org/hibernate/test/querycache/QueryCacheTest.java
Log:
HHH-5210 Query Cache effective only after closing the session that created the cache
Modified: core/trunk/core/src/main/java/org/hibernate/cache/StandardQueryCache.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/cache/StandardQueryCache.java 2010-05-11
00:49:20 UTC (rev 19461)
+++ core/trunk/core/src/main/java/org/hibernate/cache/StandardQueryCache.java 2010-05-11
01:41:38 UTC (rev 19462)
@@ -88,7 +88,7 @@
return false;
}
else {
- Long ts = Long.valueOf( session.getTimestamp() );
+ Long ts = new Long(
session.getFactory().getSettings().getRegionFactory().nextTimestamp());
if ( log.isDebugEnabled() ) {
log.debug( "caching query results in region: " + cacheRegion.getName() +
"; timestamp=" + ts );
Modified:
core/trunk/testsuite/src/test/java/org/hibernate/test/querycache/QueryCacheTest.java
===================================================================
---
core/trunk/testsuite/src/test/java/org/hibernate/test/querycache/QueryCacheTest.java 2010-05-11
00:49:20 UTC (rev 19461)
+++
core/trunk/testsuite/src/test/java/org/hibernate/test/querycache/QueryCacheTest.java 2010-05-11
01:41:38 UTC (rev 19462)
@@ -1,6 +1,7 @@
//$Id: QueryCacheTest.java 10977 2006-12-12 23:28:04Z steve.ebersole(a)jboss.com $
package org.hibernate.test.querycache;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -41,6 +42,48 @@
public static Test suite() {
return new FunctionalTestClassTestSuite( QueryCacheTest.class );
}
+ //https://jira.jboss.org/jira/browse/JBPAPP-4224
+ public void testHitCacheInSameSession() {
+ getSessions().evictQueries();
+ getSessions().getStatistics().clear();
+ Session s = openSession();
+ List list = new ArrayList();
+ s.beginTransaction();
+ for ( int i = 0; i < 3; i++ ) {
+ Item a = new Item();
+ a.setName( "a" + i );
+ a.setDescription( "a" + i );
+ list.add( a );
+ s.persist( a );
+ }
+ s.getTransaction().commit();
+
+// s.close();
+// s=openSession();
+
+ s.beginTransaction();
+ String queryString = "from Item";
+ // this query will hit the database and create the cache
+ s.createQuery( queryString ).setCacheable( true ).list();
+ s.getTransaction().commit();
+
+ s.beginTransaction();
+ //and this one SHOULD served by the cache
+ s.createQuery( queryString ).setCacheable( true ).list();
+ s.getTransaction().commit();
+ QueryStatistics qs = s.getSessionFactory().getStatistics().getQueryStatistics(
queryString );
+ assertEquals( 1, qs.getCacheHitCount() );
+ assertEquals( 1, qs.getCachePutCount() );
+ s.close();
+ s = openSession();
+ s.beginTransaction();
+ for(Object obj:list){
+ s.delete( obj );
+ }
+ s.getTransaction().commit();
+ s.close();
+
+ }
public void testQueryCacheInvalidation() throws Exception {
Show replies by date