Merge pull request #1979 from FOCONIS/bugfix/order_column_on_inheritance_model

@OrderColumn does not work on inheritance models
This commit is contained in:
Rob Bygrave
2020-03-23 22:28:57 +13:00
committed by GitHub
5 changed files with 144 additions and 0 deletions
@@ -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<OrderReferencedChild> children;
public Long getId() {
return id;
}
public void setId(final Long id) {
this.id = id;
}
public List<OrderReferencedChild> getChildren() {
return children;
}
public void setChildren(final List<OrderReferencedChild> children) {
this.children = children;
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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");
}
}