diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java index 651b85d4b..75349ce7d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java @@ -349,12 +349,13 @@ final class BeanDescriptorCacheHelp { for (Object id : ids) { keys.add(desc.cacheKey(id)); } - + if (ids.isEmpty()) { + return new BeanCacheResult<>(); + } Map beanDataMap = beanCache.getAll(keys); if (beanLog.isTraceEnabled()) { beanLog.trace(" MGET {}({}) - hits:{}", cacheName, ids, beanDataMap.keySet()); } - BeanCacheResult result = new BeanCacheResult<>(); for (Map.Entry entry : beanDataMap.entrySet()) { CachedBeanData cachedBeanData = (CachedBeanData) entry.getValue(); diff --git a/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java b/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java index d9dbbb067..39dfec865 100644 --- a/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java +++ b/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java @@ -117,6 +117,9 @@ final class RedisCache implements ServerCache { @Override public Map getAll(Set keys) { + if (keys.isEmpty()) { + return Collections.emptyMap(); + } long start = System.nanoTime(); Map map = new LinkedHashMap<>(); List keyList = new ArrayList<>(keys); diff --git a/ebean-redis/src/test/java/org/integration/IntegrationTest.java b/ebean-redis/src/test/java/org/integration/IntegrationTest.java index e2558dd69..d6c4e3230 100644 --- a/ebean-redis/src/test/java/org/integration/IntegrationTest.java +++ b/ebean-redis/src/test/java/org/integration/IntegrationTest.java @@ -11,6 +11,7 @@ import org.junit.jupiter.api.Test; import java.time.LocalDate; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -18,6 +19,22 @@ import static org.assertj.core.api.Assertions.assertThat; class IntegrationTest { + @Test + void mget_when_emptyCollectionOfIds() { + + List f0 = new QRCust() + .setIdIn(Collections.emptyList()) + .findList(); + + assertThat(f0).isEmpty(); + + List f1 = new QRCust() + .id.in(Collections.emptyList()) + .findList(); + + assertThat(f1).isEmpty(); + } + @Test void mput_via_setIdIn() throws InterruptedException { @@ -187,8 +204,8 @@ class IntegrationTest { private List nameStartsWith(String pattern) { return new QPerson() - .name.istartsWith(pattern) - .setUseQueryCache(true) - .findList(); + .name.istartsWith(pattern) + .setUseQueryCache(true) + .findList(); } }