diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index 102d63290..6a619a7dc 100644 --- a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -612,7 +612,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { } InheritInfo inheritInfo = desc.getInheritInfo(); - if (inheritInfo == null) { + if (inheritInfo == null || inheritInfo.getChildren().isEmpty()) { return (T) desc.contextRef(pc, null, false, id); } diff --git a/src/main/java/io/ebeaninternal/server/deploy/InheritInfo.java b/src/main/java/io/ebeaninternal/server/deploy/InheritInfo.java index 90095bdaf..b518e0319 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/InheritInfo.java +++ b/src/main/java/io/ebeaninternal/server/deploy/InheritInfo.java @@ -164,7 +164,14 @@ public class InheritInfo { public BeanProperty[] localProperties() { return descriptor.propertiesLocal(); } - + + /** + * Return the children. + */ + public ArrayList getChildren() { + return children; + } + /** * Get the bean property additionally looking in the sub types. */ diff --git a/src/test/java/org/tests/inheritance/TestInheritanceRefBean.java b/src/test/java/org/tests/inheritance/TestInheritanceRefBean.java new file mode 100644 index 000000000..979f58159 --- /dev/null +++ b/src/test/java/org/tests/inheritance/TestInheritanceRefBean.java @@ -0,0 +1,40 @@ +package org.tests.inheritance; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.avaje.ebeantest.LoggedSqlCollector; +import org.avaje.test.model.rawsql.inherit.ChildA; +import org.avaje.test.model.rawsql.inherit.ChildB; +import org.avaje.test.model.rawsql.inherit.Parent; +import org.junit.Test; + +import io.ebean.BaseTestCase; + +public class TestInheritanceRefBean extends BaseTestCase { + + @Test + public void test() { + Parent a = new ChildA(42, "Bean A"); + Parent b = new ChildB(43, "Bean B"); + + server().save(a); + server().save(b); + Long idA = a.getId(); + Long idB = b.getId(); + + Parent test; + + LoggedSqlCollector.start(); + test = server().getReference(ChildA.class, idA); + assertTrue(test instanceof ChildA); + assertEquals(0, LoggedSqlCollector.stop().size()); + + LoggedSqlCollector.start(); + test = server().getReference(Parent.class, idB); + assertTrue(test instanceof ChildB); + assertEquals(1, LoggedSqlCollector.stop().size()); + + + } +}