diff --git a/src/test/java/com/avaje/tests/rawsql/inherit/ParentRawSqlTest.java b/src/test/java/com/avaje/tests/rawsql/inherit/ParentRawSqlTest.java index 5d35bc031..bb3d5f46e 100644 --- a/src/test/java/com/avaje/tests/rawsql/inherit/ParentRawSqlTest.java +++ b/src/test/java/com/avaje/tests/rawsql/inherit/ParentRawSqlTest.java @@ -8,6 +8,7 @@ import com.avaje.ebean.RawSqlBuilder; import org.avaje.test.model.rawsql.inherit.ChildA; import org.avaje.test.model.rawsql.inherit.ChildB; import org.avaje.test.model.rawsql.inherit.Data; +import org.avaje.test.model.rawsql.inherit.EUncle; import org.avaje.test.model.rawsql.inherit.Parent; import org.avaje.test.model.rawsql.inherit.ParentAggregate; import org.junit.Test; @@ -17,6 +18,7 @@ import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; public class ParentRawSqlTest extends BaseTestCase { @@ -72,6 +74,14 @@ public class ParentRawSqlTest extends BaseTestCase { c.setData(exampleData); Ebean.save(c); + EUncle e1 = new EUncle(); + e1.setParent(b); + e1.setName("fester"); + Ebean.save(e1); + + joinToInheritanceHierarchy_withAliasMapping(); + joinToInheritanceHierarchy(); + useColumnMappingIgnore(); useColumnMappingWithDiscriminator(); @@ -79,6 +89,41 @@ public class ParentRawSqlTest extends BaseTestCase { useExtraColumnMappingIgnore(); } + + private void joinToInheritanceHierarchy() { + + RawSql rawSql = RawSqlBuilder + .unparsed("select u.id, u.name, p.type as ptype, p.id as pid from rawinherit_uncle u join rawinherit_parent p where p.id = u.parent_id") + .columnMapping("id", "id") + .columnMapping("name", "name") + .columnMapping("ptype", "parent.type") + .columnMapping("pid", "parent.id") + .create(); + + List uncles = Ebean.find(EUncle.class).setRawSql(rawSql) + .fetch("parent", new FetchConfig().query()) + .findList(); + + assertNotNull(uncles.get(0)); + Parent parent = uncles.get(0).getParent(); + assertTrue(parent instanceof ChildB); + } + + private void joinToInheritanceHierarchy_withAliasMapping() { + + RawSql rawSql = RawSqlBuilder + .parse("select u.id, u.name, p.type, p.id from rawinherit_uncle u join rawinherit_parent p where p.id = u.parent_id") + .tableAliasMapping("p", "parent") + .create(); + + List uncles = Ebean.find(EUncle.class).setRawSql(rawSql) + .findList(); + + assertNotNull(uncles.get(0)); + Parent parent = uncles.get(0).getParent(); + assertTrue(parent instanceof ChildB); + } + /** * Map the discriminator column - columnMapping("type", "parent.type"). */ diff --git a/src/test/java/org/avaje/test/model/rawsql/inherit/EUncle.java b/src/test/java/org/avaje/test/model/rawsql/inherit/EUncle.java new file mode 100644 index 000000000..6c2d9a4e0 --- /dev/null +++ b/src/test/java/org/avaje/test/model/rawsql/inherit/EUncle.java @@ -0,0 +1,55 @@ +package org.avaje.test.model.rawsql.inherit; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "rawinherit_uncle") +public class EUncle { + + @Id + private Integer id; + + private String name; + + @ManyToOne(optional = false) + private Parent parent; + + @Version + private Long version; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Parent getParent() { + return parent; + } + + public void setParent(Parent parent) { + this.parent = parent; + } + + public Long getVersion() { + return version; + } + + public void setVersion(Long version) { + this.version = version; + } +}