diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeLoadBean.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeLoadBean.java index 312fb359a..c12ff527a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeLoadBean.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeLoadBean.java @@ -270,6 +270,9 @@ class SqlTreeLoadBean implements SqlTreeLoad { if (disableLazyLoad) { // bean does not have an Id or is SqlSelect based ebi.setDisableLazyLoad(true); + if (!partialObject) { + ebi.setFullyLoadedBean(true); + } } else if (partialObject) { if (readId) { // register for lazy loading diff --git a/ebean-test/src/test/java/org/tests/o2m/TestOneToManyDuplicateInTxn.java b/ebean-test/src/test/java/org/tests/o2m/TestOneToManyDuplicateInTxn.java new file mode 100644 index 000000000..7e5bacd1d --- /dev/null +++ b/ebean-test/src/test/java/org/tests/o2m/TestOneToManyDuplicateInTxn.java @@ -0,0 +1,41 @@ +package org.tests.o2m; + +import io.ebean.CacheMode; +import io.ebean.DB; +import io.ebean.Transaction; +import org.junit.jupiter.api.Test; + +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; + +class TestOneToManyDuplicateInTxn { + + @Test + void findTwice() { + OMVertex master = new OMVertex(UUID.randomUUID()); + OMVertexOther child = new OMVertexOther("child"); + master.getRelated().add(child); + DB.save(master); + + try (Transaction txn = DB.beginTransaction()) { + OMVertex first = DB.find(OMVertex.class) + .setDisableLazyLoading(true) + .fetch("related") + .where().eq("id", master.getId()) + .findOne(); + + assertThat(first.getRelated()).hasSize(1); + + OMVertex second = DB.find(OMVertex.class) + //.setLoadBeanCache(true) + .setBeanCacheMode(CacheMode.PUT) + .setDisableLazyLoading(true) + .fetch("related") + .where().eq("id", master.getId()) + .findOne(); + + assertThat(second.getRelated()).hasSize(1); + } + } +}