diff --git a/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java b/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java index 4a64ff0d1..74e0bb199 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java +++ b/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java @@ -1002,6 +1002,7 @@ public class BeanDescriptorManager implements BeanDescriptorMap { orderProperty.setDbInsertable(orderColumn.isInsertable()); orderProperty.setDbUpdateable(orderColumn.isUpdatable()); orderProperty.setDbRead(true); + orderProperty.setOwningType(targetDesc.getBeanType()); targetDesc.setOrderColumn(orderProperty); } diff --git a/src/test/java/org/tests/order/OrderMaster.java b/src/test/java/org/tests/order/OrderMaster.java new file mode 100644 index 000000000..71a6978a9 --- /dev/null +++ b/src/test/java/org/tests/order/OrderMaster.java @@ -0,0 +1,34 @@ +package org.tests.order; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import javax.persistence.OrderColumn; +import java.util.List; + +@Entity +public class OrderMaster { + + @Id + Long id; + + @OneToMany(mappedBy = "master") + @OrderColumn(name = "sort_order") + List children; + + public Long getId() { + return id; + } + + public void setId(final Long id) { + this.id = id; + } + + public List getChildren() { + return children; + } + + public void setChildren(final List children) { + this.children = children; + } +} diff --git a/src/test/java/org/tests/order/OrderReferencedChild.java b/src/test/java/org/tests/order/OrderReferencedChild.java new file mode 100644 index 000000000..22215a3e9 --- /dev/null +++ b/src/test/java/org/tests/order/OrderReferencedChild.java @@ -0,0 +1,35 @@ +package org.tests.order; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import javax.persistence.ManyToOne; + +@Entity +@DiscriminatorValue("D") +public class OrderReferencedChild extends OrderReferencedParent { + + String childName; + + @ManyToOne + OrderMaster master; + + public OrderReferencedChild(final String name) { + super(name); + } + + public String getChildName() { + return childName; + } + + public void setChildName(final String childName) { + this.childName = childName; + } + + public OrderMaster getMaster() { + return master; + } + + public void setMaster(final OrderMaster master) { + this.master = master; + } +} diff --git a/src/test/java/org/tests/order/OrderReferencedParent.java b/src/test/java/org/tests/order/OrderReferencedParent.java new file mode 100644 index 000000000..b98e9f2eb --- /dev/null +++ b/src/test/java/org/tests/order/OrderReferencedParent.java @@ -0,0 +1,43 @@ +package org.tests.order; + +import io.ebean.annotation.Index; + +import javax.persistence.DiscriminatorColumn; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +import javax.persistence.MappedSuperclass; + +@Entity +@MappedSuperclass +@Inheritance(strategy = InheritanceType.SINGLE_TABLE) +@DiscriminatorColumn(name = "type") +@Index(columnNames = "type") +public class OrderReferencedParent { + + @Id + Long id; + + String name; + + public OrderReferencedParent(final String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public void setId(final Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } +} diff --git a/src/test/java/org/tests/order/TestOrderColumn.java b/src/test/java/org/tests/order/TestOrderColumn.java new file mode 100644 index 000000000..cb0477e31 --- /dev/null +++ b/src/test/java/org/tests/order/TestOrderColumn.java @@ -0,0 +1,31 @@ +package org.tests.order; + +import io.ebean.Ebean; +import io.ebean.TransactionalTestCase; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class TestOrderColumn extends TransactionalTestCase { + + @Test + public void testOrderColumnInheritance() { + final OrderMaster master = new OrderMaster(); + + for (int i = 0; i < 5; i++) { + final OrderReferencedChild child = new OrderReferencedChild("p" + i); + child.setChildName("c" + i); + + master.getChildren().add(child); + } + + Ebean.save(master); + + final OrderMaster result = Ebean.find(OrderMaster.class).findOne(); + + assertThat(result.getChildren()).hasSize(5); + assertThat(result.getChildren()).extracting(OrderReferencedChild::getName).containsExactly("p0", "p1", "p2", "p3", "p4"); + assertThat(result.getChildren()).extracting(OrderReferencedChild::getChildName).containsExactly("c0", "c1", "c2", "c3", "c4"); + } + +}