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 e97380c..10c39fd 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 @@ -79,6 +79,10 @@ boolean deferVisitVarInsn(int opcode, int var) { state = State.ALOAD; return true; } + if (opcode == ALOAD) { + // maybe constructor initialisation of OneToMany + state = State.ALOAD; + } return false; } @@ -225,6 +229,10 @@ boolean consumeVisitFieldInsn(int opcode, String owner, String name, String desc * Return true when a OneToMany or ManyToMany is not initialised in a supported manor. */ private boolean unsupportedInitialisation() { + if (state == State.ALOAD) { + // allow constructor initialisation of a OneToMany + return false; + } return state == State.MAYBE_UNSUPPORTED || state == State.UNSET // proceeded by GETSTATIC field bytecode like Collections.EMPTY_LIST || state == State.INVOKE_SPECIAL && !isConsumeManyType(); // e.g. new BeanList() diff --git a/test/src/test/java/test/model/ReferencingBean.java b/test/src/test/java/test/model/ReferencingBean.java new file mode 100644 index 0000000..2356944 --- /dev/null +++ b/test/src/test/java/test/model/ReferencingBean.java @@ -0,0 +1,28 @@ +package test.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; + +import java.util.List; +import java.util.UUID; + +@Entity +public class ReferencingBean { + + @Id @GeneratedValue + UUID id; + + @OneToMany + private List rootBeans; + + public ReferencingBean(List rootBeans) { + this.rootBeans = rootBeans; + } + + public List getRootBeans() { + return rootBeans; + } + +}