From 2d26740286b4d91df12a4a736d811e386af3eee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20P=C3=B6hler?= Date: Fri, 12 Nov 2021 17:29:10 +0100 Subject: [PATCH 01/10] FIX: typeGetAll did not work with repeated annotations on one class --- .../java/io/ebean/util/AnnotationUtil.java | 7 ++--- .../io/ebean/util/TestAnnotationUtil.java | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 ebean-api/src/test/java/io/ebean/util/TestAnnotationUtil.java diff --git a/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java b/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java index 238a3217d..583c99009 100644 --- a/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java +++ b/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java @@ -2,6 +2,7 @@ package io.ebean.util; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; +import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; @@ -57,10 +58,8 @@ public class AnnotationUtil { private static void typeGetAllCollect(Class clazz, Class annotationType, Set result) { while (clazz != null && clazz != Object.class) { - final A val = clazz.getAnnotation(annotationType); - if (val != null) { - result.add(val); - } + final A[] annotations = clazz.getAnnotationsByType(annotationType); + Collections.addAll(result, annotations); clazz = clazz.getSuperclass(); } } diff --git a/ebean-api/src/test/java/io/ebean/util/TestAnnotationUtil.java b/ebean-api/src/test/java/io/ebean/util/TestAnnotationUtil.java new file mode 100644 index 000000000..7d7519c03 --- /dev/null +++ b/ebean-api/src/test/java/io/ebean/util/TestAnnotationUtil.java @@ -0,0 +1,28 @@ +package io.ebean.util; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.File; +import java.util.Set; + +import org.junit.jupiter.api.Test; + +import io.ebean.annotation.Formula; + +public class TestAnnotationUtil { + + @Formula(select = "x") + @Formula(select = "y") + private static class TestObject { + + } + + @Test + public void testRepeatableAnnotation() { + + Set list = AnnotationUtil.typeGetAll(TestObject.class, Formula.class); + assertThat(list).hasSize(2); + + } + +} From b90393a691b36957e1bd5cc65452071c3231fce1 Mon Sep 17 00:00:00 2001 From: Noemi Szemenyei Date: Wed, 10 Nov 2021 13:30:24 +0100 Subject: [PATCH 02/10] Unittest for select Query with (*,x(y)) --- .../java/io/ebean/text/PathPropertiesTests.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/ebean-test/src/test/java/io/ebean/text/PathPropertiesTests.java b/ebean-test/src/test/java/io/ebean/text/PathPropertiesTests.java index 2fb3b5fce..fb93d1746 100644 --- a/ebean-test/src/test/java/io/ebean/text/PathPropertiesTests.java +++ b/ebean-test/src/test/java/io/ebean/text/PathPropertiesTests.java @@ -1,8 +1,11 @@ package io.ebean.text; +import io.ebean.BaseTestCase; import io.ebean.DB; import io.ebean.FetchPath; import io.ebean.Query; +import io.ebean.test.LoggedSql; + import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,7 +17,7 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; -public class PathPropertiesTests { +public class PathPropertiesTests extends BaseTestCase { private static final Logger log = LoggerFactory.getLogger(PathPropertiesTests.class); @@ -212,4 +215,16 @@ public class PathPropertiesTests { String asJson = DB.json().toJson(list, pathProps); log.info("Json: {}", asJson); } + + @Test + public void test_withAllPropsQuery() { + PathProperties root = PathProperties.parse("*,billingAddress(line1)"); + LoggedSql.start(); + Query query = DB.find(Customer.class).apply(root); + query.findList(); + List sql = LoggedSql.stop(); + assertThat(sql).hasSize(1); + assertThat(sql.get(0)).contains("select t0.status, t0.name, t0.smallnote, t0.anniversary, t0.id, t1.id, t1.line_1 from o_customer t0 left join o_address t1 on t1.id = t0.billing_address_id"); + } + } From 1b5d379ed3b4b728e03ba6129543db4da1416dea Mon Sep 17 00:00:00 2001 From: Noemi Szemenyei Date: Wed, 10 Nov 2021 16:11:42 +0100 Subject: [PATCH 03/10] Fix for Query with PathProperties (*,x(y)) --- .../server/querydefn/OrmQueryPropertiesParser.java | 6 +++++- .../src/test/java/io/ebean/text/PathPropertiesTests.java | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPropertiesParser.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPropertiesParser.java index 568a6165c..fef064e98 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPropertiesParser.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPropertiesParser.java @@ -37,7 +37,11 @@ final class OrmQueryPropertiesParser { if (rawProperties.equals("*")) { return ALL; } - return new Response(false, splitRawSelect(rawProperties)); + final Set included = splitRawSelect(rawProperties); + if (included.contains("*")) { + return ALL; + } + return new Response(false, included); } /** diff --git a/ebean-test/src/test/java/io/ebean/text/PathPropertiesTests.java b/ebean-test/src/test/java/io/ebean/text/PathPropertiesTests.java index fb93d1746..f366a6d1d 100644 --- a/ebean-test/src/test/java/io/ebean/text/PathPropertiesTests.java +++ b/ebean-test/src/test/java/io/ebean/text/PathPropertiesTests.java @@ -223,8 +223,8 @@ public class PathPropertiesTests extends BaseTestCase { Query query = DB.find(Customer.class).apply(root); query.findList(); List sql = LoggedSql.stop(); - assertThat(sql).hasSize(1); - assertThat(sql.get(0)).contains("select t0.status, t0.name, t0.smallnote, t0.anniversary, t0.id, t1.id, t1.line_1 from o_customer t0 left join o_address t1 on t1.id = t0.billing_address_id"); + assertThat(sql).hasSize(1); + assertThat(sql.get(0)).contains("select t0.id, t0.status, t0.name, t0.smallnote, t0.anniversary, t0.cretime, t0.updtime, t0.version, t0.shipping_address_id, t1.id, t1.line_1 from o_customer t0 left join o_address t1 on t1.id = t0.billing_address_id;"); } } From d3e07defa0b4ce09e71b310a045fd4b0433c6b56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20P=C3=B6hler?= Date: Fri, 12 Nov 2021 14:46:39 +0100 Subject: [PATCH 04/10] FIX: Json deserialize references --- .../io/ebeaninternal/server/deploy/BeanDescriptor.java | 10 ++++++++++ .../server/deploy/BeanDescriptorJsonHelp.java | 3 +++ .../org/tests/text/json/TestTextJsonReferenceBean.java | 9 ++------- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java index d675d9bf0..8d047e88e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java @@ -3038,6 +3038,10 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType { return ebi.isReference() || referenceIdPropertyOnly(ebi); } + boolean hasIdPropertyOnly(EntityBeanIntercept ebi) { + return propertiesBaseScalar.length > 0 && ebi.hasIdOnly(idPropertyIndex); + } + public boolean referenceIdPropertyOnly(EntityBeanIntercept ebi) { return idOnlyReference && ebi.hasIdOnly(idPropertyIndex); } @@ -3055,6 +3059,12 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType { return versionPropertyIndex > -1 && ebi.isLoadedProperty(versionPropertyIndex); } + void setReferenceIfIdOnly(EntityBeanIntercept ebi) { + if (hasIdPropertyOnly(ebi)) { + ebi.setReference(idPropertyIndex); + } + } + /** * Set the version value returning it in primitive long form. */ diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java index b11c987bb..6eef2b06d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java @@ -152,6 +152,9 @@ final class BeanDescriptorJsonHelp { } if (contextBean == null) { readJson.beanVisitor(bean, unmappedProperties); + if (!isNullOrZero(id)) { + desc.setReferenceIfIdOnly(bean._ebean_getIntercept()); + } } if (path != null) { readJson.popPath(); diff --git a/ebean-test/src/test/java/org/tests/text/json/TestTextJsonReferenceBean.java b/ebean-test/src/test/java/org/tests/text/json/TestTextJsonReferenceBean.java index 0f0f66f02..95ce27683 100644 --- a/ebean-test/src/test/java/org/tests/text/json/TestTextJsonReferenceBean.java +++ b/ebean-test/src/test/java/org/tests/text/json/TestTextJsonReferenceBean.java @@ -47,15 +47,10 @@ public class TestTextJsonReferenceBean extends BaseTestCase { prodDesc.isReference(eb._ebean_getIntercept()); BeanState beanState = DB.beanState(refProd); - assertTrue(beanState.isNew()); + assertTrue(beanState.isReference()); String name = refProd.getName(); - assertNull(name); - - // Set to be 'loaded' to invoke lazy loading - beanState.setLoaded(); - String name2 = refProd.getName(); - assertNotNull(name2); + assertNotNull(name); } List orders = DB.find(Order.class) From 1c224444c08abc5de5f8e58e4614945c5dfcf208 Mon Sep 17 00:00:00 2001 From: Noemi Szemenyei Date: Fri, 12 Nov 2021 10:40:15 +0100 Subject: [PATCH 05/10] Assume InfoInherit infoType when it has no children --- .../server/deploy/AssocOneHelpRefInherit.java | 14 ++++++++++---- .../org/tests/inheritance/bothsides/Target1.java | 1 - .../lazyforeignkeys/MainEntityRelation.java | 16 ++++++++++++++++ .../lazyforeignkeys/TestLazyForeignKeys.java | 16 +++++++++++++++- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java index 3a471f666..6ca843258 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java @@ -31,10 +31,17 @@ final class AssocOneHelpRefInherit extends AssocOneHelp { Object read(DbReadContext ctx) throws SQLException { // read discriminator to determine the type InheritInfo rowInheritInfo = inherit.readType(ctx); + BeanDescriptor desc; if (rowInheritInfo == null) { - // ignore the id property - property.targetIdBinder.loadIgnore(ctx); - return null; + if(!inherit.hasChildren()) { + desc = inherit.desc(); + } else { + // ignore the id property + property.targetIdBinder.loadIgnore(ctx); + return null; + } + } else { + desc = rowInheritInfo.desc(); } Object id = property.targetIdBinder.read(ctx); if (id == null) { @@ -42,7 +49,6 @@ final class AssocOneHelpRefInherit extends AssocOneHelp { } // check transaction context to see if it already exists PersistenceContext pc = ctx.getPersistenceContext(); - BeanDescriptor desc = rowInheritInfo.desc(); Object existing = desc.contextGet(pc, id); if (existing != null) { return existing; diff --git a/ebean-test/src/test/java/org/tests/inheritance/bothsides/Target1.java b/ebean-test/src/test/java/org/tests/inheritance/bothsides/Target1.java index 5803d8046..f39c3ee61 100644 --- a/ebean-test/src/test/java/org/tests/inheritance/bothsides/Target1.java +++ b/ebean-test/src/test/java/org/tests/inheritance/bothsides/Target1.java @@ -4,7 +4,6 @@ import javax.persistence.Entity; import javax.persistence.Inheritance; @Entity -@Inheritance public class Target1 extends TargetBase { public Target1(String name) { diff --git a/ebean-test/src/test/java/org/tests/lazyforeignkeys/MainEntityRelation.java b/ebean-test/src/test/java/org/tests/lazyforeignkeys/MainEntityRelation.java index 5da5ffdbf..19d2bfd48 100644 --- a/ebean-test/src/test/java/org/tests/lazyforeignkeys/MainEntityRelation.java +++ b/ebean-test/src/test/java/org/tests/lazyforeignkeys/MainEntityRelation.java @@ -3,6 +3,9 @@ package org.tests.lazyforeignkeys; import io.ebean.annotation.DbForeignKey; import javax.persistence.*; + +import org.tests.model.basic.Cat; + import java.util.UUID; @@ -22,6 +25,11 @@ public class MainEntityRelation { @JoinColumn(name = "id2") @DbForeignKey(noConstraint = true) private MainEntity entity2; + + @ManyToOne + @JoinColumn(name = "cat_id") + @DbForeignKey(noConstraint = true) + private Cat cat; private String attr1; @@ -41,6 +49,14 @@ public class MainEntityRelation { this.entity2 = entity2; } + public Cat getCat() { + return cat; + } + + public void setCat(Cat cat) { + this.cat = cat; + } + public String getAttr1() { return attr1; } diff --git a/ebean-test/src/test/java/org/tests/lazyforeignkeys/TestLazyForeignKeys.java b/ebean-test/src/test/java/org/tests/lazyforeignkeys/TestLazyForeignKeys.java index 9d88e84ed..7fb3fcc05 100644 --- a/ebean-test/src/test/java/org/tests/lazyforeignkeys/TestLazyForeignKeys.java +++ b/ebean-test/src/test/java/org/tests/lazyforeignkeys/TestLazyForeignKeys.java @@ -8,6 +8,7 @@ import io.ebean.text.PathProperties; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.tests.model.basic.Cat; import java.util.List; @@ -56,7 +57,7 @@ public class TestLazyForeignKeys extends BaseTestCase { List sql = LoggedSql.stop(); assertThat(sql).hasSize(3); - assertSql(sql.get(0)).contains("select t0.id, t0.attr1, t0.id1, t0.id2 from main_entity_relation"); + assertSql(sql.get(0)).contains("select t0.id, t0.attr1, t0.id1, t0.id2, t1.species, t0.cat_id from main_entity_relation t0 left join animal t1 on t1.id = t0.cat_id"); if (isSqlServer() || isOracle()) { assertSql(sql.get(1)).contains("select t0.id, t0.attr1, t0.attr2, CASE WHEN t0.id is null THEN 1 ELSE 0 END from main_entity t0"); } else { @@ -86,4 +87,17 @@ public class TestLazyForeignKeys extends BaseTestCase { assertFalse(rel1.getEntity1().isDeleted()); assertTrue(rel1.getEntity2().isDeleted()); } + + @Test + public void testGetWithDbForeignKey() { + MainEntityRelation relation = DB.find(MainEntityRelation.class).findOne(); + Cat cat = new Cat(); + cat.setId(123L); + relation.setCat(cat); + DB.save(relation); + + relation = DB.find(MainEntityRelation.class).findOne(); + + assertNotNull(relation.getCat()); + } } From 60d0a3da398041c3224a25a841d141b451d2bcbe Mon Sep 17 00:00:00 2001 From: Noemi Szemenyei Date: Fri, 19 Nov 2021 11:50:45 +0100 Subject: [PATCH 06/10] 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); + + } + + } From d5fe7a9ebe0db6b04381e3aa1fa393c5108b9db9 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 22 Nov 2021 10:23:27 +1300 Subject: [PATCH 07/10] Whitespace format only - OrmQueryPropertiesParser --- .../server/querydefn/OrmQueryPropertiesParser.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPropertiesParser.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPropertiesParser.java index fef064e98..6a75b82a9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPropertiesParser.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPropertiesParser.java @@ -39,8 +39,8 @@ final class OrmQueryPropertiesParser { } final Set included = splitRawSelect(rawProperties); if (included.contains("*")) { - return ALL; - } + return ALL; + } return new Response(false, included); } From 093d111524116a53257350fee7fd91a23ff1eb3d Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 22 Nov 2021 14:59:40 +1300 Subject: [PATCH 08/10] #2440 - Re-use existing referenceIdPropertyOnly() method --- .../java/io/ebeaninternal/server/deploy/BeanDescriptor.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java index 8d047e88e..325213933 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java @@ -3038,10 +3038,6 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType { return ebi.isReference() || referenceIdPropertyOnly(ebi); } - boolean hasIdPropertyOnly(EntityBeanIntercept ebi) { - return propertiesBaseScalar.length > 0 && ebi.hasIdOnly(idPropertyIndex); - } - public boolean referenceIdPropertyOnly(EntityBeanIntercept ebi) { return idOnlyReference && ebi.hasIdOnly(idPropertyIndex); } @@ -3060,7 +3056,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType { } void setReferenceIfIdOnly(EntityBeanIntercept ebi) { - if (hasIdPropertyOnly(ebi)) { + if (referenceIdPropertyOnly(ebi)) { ebi.setReference(idPropertyIndex); } } From 1114ccfb3abf19393aeecff25996cf97faeb53ab Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 22 Nov 2021 15:12:18 +1300 Subject: [PATCH 09/10] #2441 Flatten and re-order if block in AssocOneHelpRefInherit when determining BeanDescriptor --- .../server/deploy/AssocOneHelpRefInherit.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java index 6ca843258..b797c5a0c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java @@ -32,16 +32,14 @@ final class AssocOneHelpRefInherit extends AssocOneHelp { // read discriminator to determine the type InheritInfo rowInheritInfo = inherit.readType(ctx); BeanDescriptor desc; - if (rowInheritInfo == null) { - if(!inherit.hasChildren()) { - desc = inherit.desc(); - } else { - // ignore the id property - property.targetIdBinder.loadIgnore(ctx); - return null; - } - } else { + if (rowInheritInfo != null) { desc = rowInheritInfo.desc(); + } else if (!inherit.hasChildren()) { + desc = inherit.desc(); + } else { + // ignore the id property + property.targetIdBinder.loadIgnore(ctx); + return null; } Object id = property.targetIdBinder.read(ctx); if (id == null) { From 86d805c9fa0f755009700bea198b921bb869f5ae Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 22 Nov 2021 15:21:03 +1300 Subject: [PATCH 10/10] Tidy internals only for OrmQueryRequest after merge of #2442 --- .../server/core/OrmQueryRequest.java | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) 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 b1ca1686e..6ff7e5acb 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 @@ -36,7 +36,6 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery private final Boolean readOnly; private LoadContext loadContext; private PersistenceContext persistenceContext; - private JsonReadOptions jsonRead; private HashQuery cacheKey; private CQueryPlanKey queryPlanKey; private SpiQuerySecondary secondaryQueries; @@ -259,7 +258,7 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery if (query.getPersistenceContext() == null) { query.setPersistenceContext(persistenceContext); } - jsonRead = new JsonReadOptions(); + JsonReadOptions jsonRead = new JsonReadOptions(); jsonRead.setPersistenceContext(persistenceContext); if (!query.isDisableLazyLoading()) { loadContext = new DLoadContext(this, secondaryQueries); @@ -534,7 +533,7 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery @SuppressWarnings({"rawtypes"}) private void mergeCacheHitsToMap(BeanCollection result) { - BeanMap map = (BeanMap)result; + BeanMap map = (BeanMap) result; ElPropertyValue property = mapProperty(); for (T bean : cacheBeans) { map.internalPut(property.pathGet(bean), bean); @@ -562,22 +561,18 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery @SuppressWarnings("unchecked") private Map cacheBeansToMap() { ElPropertyValue property = mapProperty(); - Map map = new LinkedHashMap<>(); + Map map = new LinkedHashMap<>(); for (T bean : cacheBeans) { - map.put((K)property.pathGet(bean), bean); + map.put((K) property.pathGet(bean), bean); } return map; } private ElPropertyValue mapProperty() { - ElPropertyValue property; - if (query.getMapKey() == null) { - property = beanDescriptor.idProperty(); - } else { - property = beanDescriptor.elGetValue(query.getMapKey()); - } + final String key = query.getMapKey(); + final ElPropertyValue property = key == null ? beanDescriptor.idProperty() : beanDescriptor.elGetValue(key); if (property == null) { - throw new IllegalStateException("Unknown map key property " + query.getMapKey()); + throw new IllegalStateException("Unknown map key property " + key); } return property; } @@ -639,7 +634,7 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery if (cached != null && isAuditReads() && readAuditQueryType()) { if (cached instanceof BeanCollection) { // raw sql can't use L2 cache so normal queries only in here - Collection actualDetails = ((BeanCollection)cached).getActualDetails(); + Collection actualDetails = ((BeanCollection) cached).getActualDetails(); List ids = new ArrayList<>(actualDetails.size()); for (T bean : actualDetails) { ids.add(beanDescriptor.idForJson(bean)); @@ -650,13 +645,13 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery if (Boolean.FALSE.equals(query.isReadOnly())) { // return shallow copies if readonly is explicitly set to false if (cached instanceof BeanCollection) { - cached = ((BeanCollection)cached).getShallowCopy(); + cached = ((BeanCollection) cached).getShallowCopy(); } else if (cached instanceof List) { - cached = new CopyOnFirstWriteList<>((List)cached); + cached = new CopyOnFirstWriteList<>((List) cached); } else if (cached instanceof Set) { - cached = new LinkedHashSet<>((Set)cached); + cached = new LinkedHashSet<>((Set) cached); } else if (cached instanceof Map) { - cached = new LinkedHashMap<>((Map)cached); + cached = new LinkedHashMap<>((Map) cached); } } return cached;