diff --git a/src/main/java/io/ebeaninternal/server/query/DefaultOrmQueryEngine.java b/src/main/java/io/ebeaninternal/server/query/DefaultOrmQueryEngine.java index 5b3758eb9..c1efc43f1 100644 --- a/src/main/java/io/ebeaninternal/server/query/DefaultOrmQueryEngine.java +++ b/src/main/java/io/ebeaninternal/server/query/DefaultOrmQueryEngine.java @@ -162,7 +162,7 @@ public class DefaultOrmQueryEngine implements OrmQueryEngine { request.mergeCacheHits(result); - if (!result.isEmpty() && query.getUseQueryCache().isPut()) { + if (query.getUseQueryCache().isPut()) { // load the query result into the query cache result.setReadOnly(true); request.putToQueryCache(result); diff --git a/src/test/java/org/tests/cache/TestQueryCacheCountry.java b/src/test/java/org/tests/cache/TestQueryCacheCountry.java index ae506051b..b70a8ad81 100644 --- a/src/test/java/org/tests/cache/TestQueryCacheCountry.java +++ b/src/test/java/org/tests/cache/TestQueryCacheCountry.java @@ -3,31 +3,72 @@ package org.tests.cache; import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.cache.ServerCache; +import io.ebean.cache.ServerCacheManager; import io.ebean.cache.ServerCacheStatistics; -import org.tests.model.basic.Country; -import org.tests.model.basic.ResetBasicData; import org.junit.Assert; import org.junit.Test; +import org.tests.model.basic.Country; +import org.tests.model.basic.ResetBasicData; import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; public class TestQueryCacheCountry extends BaseTestCase { + private ServerCacheManager cacheManager = Ebean.getServerCacheManager(); + private ServerCache queryCache = cacheManager.getQueryCache(Country.class); + private ServerCache beanCache = cacheManager.getBeanCache(Country.class); + + private void clearCache() { + queryCache.clear(); + beanCache.clear(); + queryCache.getStatistics(true); + } + + + @Test + public void emptyQueryResult_expect_cached() { + + ResetBasicData.reset(); + clearCache(); + + List countryList0 = Ebean.find(Country.class) + .setUseQueryCache(true) + .where().startsWith("name", "XLKMG") + .order().asc("name") + .findList(); + + assertThat(countryList0).isEmpty(); + + ServerCacheStatistics queryStats = queryCache.getStatistics(false); + assertEquals(1, queryStats.getMissCount()); + assertEquals(1, queryStats.getSize()); + + List countryList1 = Ebean.find(Country.class) + .setUseQueryCache(true) + .where().startsWith("name", "XLKMG") + .order().asc("name") + .findList(); + + assertThat(countryList1).isEmpty(); + + ServerCacheStatistics queryStats1 = queryCache.getStatistics(false); + assertEquals(1, queryStats1.getMissCount()); + assertEquals(1, queryStats1.getSize()); + assertEquals(1, queryStats1.getHitCount()); + } + @Test public void test() { ResetBasicData.reset(); awaitL2Cache(); - - ServerCache queryCache = Ebean.getServerCacheManager().getQueryCache(Country.class); - queryCache.clear(); - - ServerCache beanCache = Ebean.getServerCacheManager().getBeanCache(Country.class); - beanCache.clear(); + clearCache(); assertEquals(0, queryCache.getStatistics(false).getSize()); @@ -62,7 +103,7 @@ public class TestQueryCacheCountry extends BaseTestCase { .order().asc("name") .findList(); - Assert.assertNotSame(countryList2, countryList0); + assertNotSame(countryList2, countryList0); } }