From a6bf89492b871e28b9efdbb6827b524111b5f48b Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Fri, 4 Apr 2025 19:45:11 +1300 Subject: [PATCH] Support LinkedList and HashMap for initialisation of OneToMany,ManyToMany,DbArray --- .../entity/ConstructorDeferredCode.java | 5 ++-- .../WithInitialisedCollections2Test.java | 4 +++ .../model/WithInitialisedCollections2.java | 25 +++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/ebean-agent/src/main/java/io/ebean/enhance/entity/ConstructorDeferredCode.java b/ebean-agent/src/main/java/io/ebean/enhance/entity/ConstructorDeferredCode.java index 10c39fd..93177d4 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/entity/ConstructorDeferredCode.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/entity/ConstructorDeferredCode.java @@ -297,10 +297,11 @@ private boolean stateConsumeDeferred() { */ private boolean isConsumeManyType() { return "java/util/ArrayList".equals(stateInitialiseType) + || "java/util/LinkedList".equals(stateInitialiseType) || "java/util/LinkedHashSet".equals(stateInitialiseType) || "java/util/HashSet".equals(stateInitialiseType) - || "java/util/LinkedHashMap".equals(stateInitialiseType); - //|| "java/util/HashMap".equals(stateInitialiseType)); + || "java/util/LinkedHashMap".equals(stateInitialiseType) + || "java/util/HashMap".equals(stateInitialiseType); } private static class ALoad implements DeferredCode { diff --git a/test/src/test/java/test/enhancement/WithInitialisedCollections2Test.java b/test/src/test/java/test/enhancement/WithInitialisedCollections2Test.java index f31e8b1..1aced29 100644 --- a/test/src/test/java/test/enhancement/WithInitialisedCollections2Test.java +++ b/test/src/test/java/test/enhancement/WithInitialisedCollections2Test.java @@ -17,18 +17,22 @@ void oneToMany_initialisationCode_expect_removed() { assertThat(bean.listOf()).isInstanceOf(BeanList.class); assertThat(bean.listCollEmpty()).isInstanceOf(BeanList.class); + assertThat(bean.listCollLinked()).isInstanceOf(BeanList.class); assertThat(bean.setOf()).isInstanceOf(BeanSet.class); assertThat(bean.setCollEmpty()).isInstanceOf(BeanSet.class); assertThat(bean.mapOf()).isInstanceOf(BeanMap.class); assertThat(bean.mapCollEmpty()).isInstanceOf(BeanMap.class); + assertThat(bean.mapCollHash()).isInstanceOf(BeanMap.class); assertThat(bean.transientList()).isNotInstanceOf(BeanList.class); assertThat(bean.transientList2()).isNotInstanceOf(BeanList.class); + assertThat(bean.transientList3()).isNotInstanceOf(BeanList.class); assertThat(bean.transientSet()).isNotInstanceOf(BeanSet.class); assertThat(bean.transientSet2()).isNotInstanceOf(BeanSet.class); assertThat(bean.transientMap()).isNotInstanceOf(BeanMap.class); assertThat(bean.transientMap2()).isNotInstanceOf(BeanMap.class); + assertThat(bean.transientMap3()).isNotInstanceOf(BeanMap.class); // these methods work because the underlying collection is a BeanCollection diff --git a/test/src/test/java/test/model/WithInitialisedCollections2.java b/test/src/test/java/test/model/WithInitialisedCollections2.java index 8911fc2..926c919 100644 --- a/test/src/test/java/test/model/WithInitialisedCollections2.java +++ b/test/src/test/java/test/model/WithInitialisedCollections2.java @@ -25,6 +25,11 @@ public class WithInitialisedCollections2 extends BaseEntity { final Set setCollEmpty = Collections.emptySet(); @OneToMany(cascade = CascadeType.PERSIST) Map mapCollEmpty = Collections.emptyMap(); + @OneToMany(cascade = CascadeType.PERSIST) + Map mapCollHash = new HashMap<>(); + + @OneToMany(cascade = CascadeType.PERSIST) + final List listCollLinked = new LinkedList<>(); // @OneToMany final List listCollNotValidInitialisation0 = new io.ebean.common.BeanList<>(); // @OneToMany final List listCollNotValidInitialisation1 = Collections.EMPTY_LIST; @@ -38,11 +43,15 @@ public class WithInitialisedCollections2 extends BaseEntity { @Transient Map transientMap = Map.of(); @Transient + List transientList3 = new LinkedList<>(); + @Transient List transientList2 = Collections.emptyList(); @Transient Set transientSet2 = Collections.emptySet(); @Transient Map transientMap2 = Collections.emptyMap(); + @Transient + Map transientMap3 = new HashMap<>(); public String name() { return name; @@ -100,4 +109,20 @@ public Map transientMap() { public Map transientMap2() { return transientMap2; } + + public List listCollLinked() { + return listCollLinked; + } + + public List transientList3() { + return transientList3; + } + + public Map mapCollHash() { + return mapCollHash; + } + + public Map transientMap3() { + return transientMap3; + } }