From 3efb552bd9d031c361dc7a531ddd1c5f0af424e0 Mon Sep 17 00:00:00 2001 From: Noemi Szemenyei Date: Fri, 19 Nov 2021 11:50:45 +0100 Subject: [PATCH] findMap() with beanCache should use idPoperty if mapKey = null --- .../server/core/OrmQueryRequest.java | 7 +++- .../org/tests/basic/TestLoadBeanCache.java | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java index f314e868a..b1ca1686e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java @@ -570,7 +570,12 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery } private ElPropertyValue mapProperty() { - ElPropertyValue property = beanDescriptor.elGetValue(query.getMapKey()); + ElPropertyValue property; + if (query.getMapKey() == null) { + property = beanDescriptor.idProperty(); + } else { + property = beanDescriptor.elGetValue(query.getMapKey()); + } if (property == null) { throw new IllegalStateException("Unknown map key property " + query.getMapKey()); } diff --git a/ebean-test/src/test/java/org/tests/basic/TestLoadBeanCache.java b/ebean-test/src/test/java/org/tests/basic/TestLoadBeanCache.java index c96373de3..47eb98793 100644 --- a/ebean-test/src/test/java/org/tests/basic/TestLoadBeanCache.java +++ b/ebean-test/src/test/java/org/tests/basic/TestLoadBeanCache.java @@ -2,12 +2,18 @@ package org.tests.basic; import io.ebean.BaseTestCase; import io.ebean.DB; +import io.ebean.test.LoggedSql; + import org.junit.jupiter.api.Test; import org.tests.model.basic.Country; +import org.tests.model.basic.Customer; import org.tests.model.basic.ResetBasicData; +import java.util.List; import java.util.Map; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; public class TestLoadBeanCache extends BaseTestCase { @@ -31,4 +37,30 @@ public class TestLoadBeanCache extends BaseTestCase { assertTrue(loadedNz == nz); } + + @Test + public void testLoadWithFindMap() { + + ResetBasicData.reset(); + + List ids = DB.find(Customer.class).findIds(); + assertEquals(ids.size(), 4); + + DB.getDefault().pluginApi().cacheManager().clearAll(); + + // hit database + LoggedSql.start(); + DB.find(Customer.class).where().idIn(ids).findMap(); + List sql = LoggedSql.stop(); + assertThat(sql).hasSize(1); + + // hit beanCache + LoggedSql.start(); + DB.find(Customer.class).where().idIn(ids).findMap(); + sql = LoggedSql.stop(); + assertThat(sql).hasSize(0); + + } + + }