From 19459b71b4f436667ab42d6bf801b1d84c7e60c6 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Wed, 30 Sep 2015 23:35:10 +1300 Subject: [PATCH] Fix for #425 - Extra instance of root level bean with findIterate() and fetch of OneToMany relationship - Ebean parses the first bean correctly and the rest not --- .../avaje/ebeaninternal/server/core/OrmQueryRequest.java | 9 +++++++++ .../com/avaje/ebeaninternal/server/query/CQuery.java | 1 + .../avaje/tests/query/TestOneToManyCorrectGrouping.java | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/OrmQueryRequest.java b/src/main/java/com/avaje/ebeaninternal/server/core/OrmQueryRequest.java index aa946cbbc..ea6f2c826 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/OrmQueryRequest.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/OrmQueryRequest.java @@ -10,6 +10,7 @@ import javax.persistence.PersistenceException; import com.avaje.ebean.*; import com.avaje.ebean.bean.BeanCollection; +import com.avaje.ebean.bean.EntityBean; import com.avaje.ebean.bean.PersistenceContext; import com.avaje.ebean.event.BeanFindController; import com.avaje.ebean.event.BeanQueryRequest; @@ -151,6 +152,14 @@ public final class OrmQueryRequest extends BeanRequest implements BeanQueryRe return persistenceContext; } + /** + * Add the bean to the persistence context. + */ + public void persistenceContextAdd(EntityBean bean) { + Object id = beanDescriptor.getId(bean); + persistenceContext.put(id, bean); + } + /** * This will create a local (readOnly) transaction if no current transaction * exists. diff --git a/src/main/java/com/avaje/ebeaninternal/server/query/CQuery.java b/src/main/java/com/avaje/ebeaninternal/server/query/CQuery.java index 3f3231c08..3bde3c115 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/query/CQuery.java +++ b/src/main/java/com/avaje/ebeaninternal/server/query/CQuery.java @@ -433,6 +433,7 @@ public class CQuery implements DbReadContext, CancelableQuery { } else { // nextBean set to previously read currentBean nextBean = currentBean; + request.persistenceContextAdd(nextBean); // check the current row we have just moved to if (checkForDifferentBean()) { return true; diff --git a/src/test/java/com/avaje/tests/query/TestOneToManyCorrectGrouping.java b/src/test/java/com/avaje/tests/query/TestOneToManyCorrectGrouping.java index 98b37afdf..d68cf8b4d 100644 --- a/src/test/java/com/avaje/tests/query/TestOneToManyCorrectGrouping.java +++ b/src/test/java/com/avaje/tests/query/TestOneToManyCorrectGrouping.java @@ -21,7 +21,7 @@ public class TestOneToManyCorrectGrouping extends BaseTestCase { ResetBasicData.reset(); Query customerQuery = Ebean.find(Customer.class) .fetch("orders") - .where() + .where().le("id", 2) .query(); QueryIterator customerQueryIterator = customerQuery.findIterate();