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 93177d4..4140877 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
@@ -46,6 +46,7 @@ enum State {
KT_CHECKCAST, // optional kotlin state
KT_LABEL, // optional kotlin state
EMPTY,
+ GETFIELD,
MAYBE_UNSUPPORTED
}
@@ -222,6 +223,9 @@ boolean consumeVisitFieldInsn(int opcode, String owner, String name, String desc
}
}
flush();
+ if (opcode == GETFIELD) {
+ state = State.GETFIELD;
+ }
return false;
}
@@ -229,8 +233,8 @@ 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
+ if (state == State.ALOAD || state == State.GETFIELD) {
+ // allow constructor initialisation of a OneToMany via constructor arg or builder
return false;
}
return state == State.MAYBE_UNSUPPORTED
diff --git a/test/pom.xml b/test/pom.xml
index c4ec196..3e11697 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -94,6 +94,11 @@
test
+
+ org.projectlombok
+ lombok
+ 1.18.38
+
@@ -104,6 +109,11 @@
3.11.0
+
+ org.projectlombok
+ lombok
+ 1.18.38
+
io.ebean
querybean-generator
diff --git a/test/src/test/java/test/model/lombok/App.java b/test/src/test/java/test/model/lombok/App.java
new file mode 100644
index 0000000..c3ada37
--- /dev/null
+++ b/test/src/test/java/test/model/lombok/App.java
@@ -0,0 +1,15 @@
+package test.model.lombok;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class App {
+
+ @Id
+ long id;
+
+ @Column
+ String name;
+}
diff --git a/test/src/test/java/test/model/lombok/Msock.java b/test/src/test/java/test/model/lombok/Msock.java
new file mode 100644
index 0000000..4c135c3
--- /dev/null
+++ b/test/src/test/java/test/model/lombok/Msock.java
@@ -0,0 +1,133 @@
+package test.model.lombok;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.Table;
+import lombok.Generated;
+
+import java.util.List;
+
+@Entity
+@Table(name = "stock")
+public class Msock {
+
+ private String name;
+ private String code;
+ @ManyToMany(fetch = FetchType.LAZY)
+ private List myapps;
+
+ @Generated
+ public Msock() {
+ }
+
+ @Generated
+ protected Msock(Msock.StockBuilder, ?> b) {
+ this.name = b.name;
+ this.code = b.code;
+ this.myapps = b.apps;
+ }
+
+ @Generated
+ public Msock(String name, String code, List apps) {
+ this.name = name;
+ this.code = code;
+ this.myapps = apps;
+ }
+
+ @Generated
+ public static Msock.StockBuilder, ?> builder() {
+ return new Msock.StockBuilderImpl();
+ }
+
+ @Generated
+ public String getName() {
+ return this.name;
+ }
+
+ @Generated
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Generated
+ public String getCode() {
+ return this.code;
+ }
+
+ @Generated
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ @Generated
+ public List getApps() {
+ return this.myapps;
+ }
+
+ @Generated
+ public void setApps(List myapps) {
+ this.myapps = myapps;
+ }
+
+ @Generated
+ public abstract static class StockBuilder> {
+ @Generated
+ private String name;
+ @Generated
+ private String code;
+ @Generated
+ private List apps;
+
+ public StockBuilder() {
+ }
+
+ @Generated
+ public B name(String name) {
+ this.name = name;
+ return this.self();
+ }
+
+ @Generated
+ public B code(String code) {
+ this.code = code;
+ return this.self();
+ }
+
+ @Generated
+ public B apps(List apps) {
+ this.apps = apps;
+ return this.self();
+ }
+
+ @Generated
+ protected abstract B self();
+
+ @Generated
+ public abstract C build();
+
+ @Generated
+ public String toString() {
+ String var10000 = this.name;
+ return "Stock.StockBuilder(name=" + var10000 + ", code=" + this.code + ", apps=" + String.valueOf(this.apps) + ")";
+ }
+ }
+
+ @Generated
+ private static final class StockBuilderImpl extends Msock.StockBuilder {
+ @Generated
+ private StockBuilderImpl() {
+ }
+
+ @Generated
+ protected StockBuilderImpl self() {
+ return this;
+ }
+
+ @Generated
+ public Msock build() {
+ return new Msock(this);
+ }
+ }
+}
+