From 5e97c3bbbcc0a4ff69b6e47bf2bd95198243fb35 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Wed, 30 Sep 2015 23:24:53 +1300 Subject: [PATCH] #425 - Extra instance of root level bean with findIterate() and fetch of OneToMany relationship - Ebean parses the first bean correctly and the rest not --- .../tests/model/basic/ResetBasicData.java | 18 ++++++-- .../query/TestOneToManyCorrectGrouping.java | 45 +++++++++++++++++++ 2 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 src/test/java/com/avaje/tests/query/TestOneToManyCorrectGrouping.java diff --git a/src/test/java/com/avaje/tests/model/basic/ResetBasicData.java b/src/test/java/com/avaje/tests/model/basic/ResetBasicData.java index 1efb0c41e..dab2fd605 100644 --- a/src/test/java/com/avaje/tests/model/basic/ResetBasicData.java +++ b/src/test/java/com/avaje/tests/model/basic/ResetBasicData.java @@ -1,14 +1,14 @@ package com.avaje.tests.model.basic; -import java.sql.Date; -import java.util.ArrayList; -import java.util.List; - import com.avaje.ebean.Ebean; import com.avaje.ebean.EbeanServer; import com.avaje.ebean.TxRunnable; import com.avaje.tests.model.basic.Order.Status; +import java.sql.Date; +import java.util.ArrayList; +import java.util.List; + public class ResetBasicData { private static boolean runOnce; @@ -135,6 +135,7 @@ public class ResetBasicData { createOrder2(cust2); createOrder3(cust1); createOrder4(cust1); + createOrder5(cust2); } }); } @@ -313,4 +314,13 @@ public class ResetBasicData { Ebean.save(order); } + + private void createOrder5(Customer customer) { + + Order order = new Order(); + order.setCustomer(customer); + order.addShipment(new OrderShipment()); + + Ebean.save(order); + } } diff --git a/src/test/java/com/avaje/tests/query/TestOneToManyCorrectGrouping.java b/src/test/java/com/avaje/tests/query/TestOneToManyCorrectGrouping.java new file mode 100644 index 000000000..98b37afdf --- /dev/null +++ b/src/test/java/com/avaje/tests/query/TestOneToManyCorrectGrouping.java @@ -0,0 +1,45 @@ +package com.avaje.tests.query; + +import com.avaje.ebean.BaseTestCase; +import com.avaje.ebean.Ebean; +import com.avaje.ebean.Query; +import com.avaje.ebean.QueryIterator; +import com.avaje.tests.model.basic.Customer; +import com.avaje.tests.model.basic.Order; +import com.avaje.tests.model.basic.ResetBasicData; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class TestOneToManyCorrectGrouping extends BaseTestCase { + + public static final int EXPECTED_ITERATIONS = 2; + + @Test + public void test() { + + ResetBasicData.reset(); + Query customerQuery = Ebean.find(Customer.class) + .fetch("orders") + .where() + .query(); + + QueryIterator customerQueryIterator = customerQuery.findIterate(); + + try { + int count = 0; + while (customerQueryIterator.hasNext()) { + Customer customer = customerQueryIterator.next(); + System.out.println(String.format("Customer id %s", customer.getId())); + for (Order order : customer.getOrders()) { + System.out.println(String.format("--> Order id %s", order.getId())); + } + count++; + } + assertEquals(EXPECTED_ITERATIONS, count); + + } finally { + customerQueryIterator.close(); + } + } +}