mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
ADD: failing testcase for @OrderColumn working when referencing the parent of a inheritance structure
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
package org.tests.inheritance;
|
||||
|
||||
import io.ebean.BaseTestCase;
|
||||
import io.ebean.Ebean;
|
||||
import io.ebeantest.LoggedSql;
|
||||
import org.ebeantest.LoggedSqlCollector;
|
||||
import org.junit.Test;
|
||||
import org.tests.inheritance.order.OrderMasterInheritance;
|
||||
import org.tests.inheritance.order.OrderedA;
|
||||
import org.tests.inheritance.order.OrderedB;
|
||||
import org.tests.inheritance.order.OrderedParent;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class TestInheritanceOrderColumn extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
final OrderMasterInheritance master = new OrderMasterInheritance();
|
||||
final OrderedA orderedA = new OrderedA();
|
||||
orderedA.setCommonName("commonOrderedA");
|
||||
orderedA.setOrderedAName("orderedA");
|
||||
|
||||
final OrderedB orderedB = new OrderedB();
|
||||
orderedB.setCommonName("commonOrderedB");
|
||||
orderedB.setOrderedBName("orderedB");
|
||||
|
||||
master.getReferenced().add(orderedA);
|
||||
master.getReferenced().add(orderedB);
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
Ebean.save(master);
|
||||
List<String> sql = LoggedSqlCollector.stop();
|
||||
assertThat(sql).hasSize(5);
|
||||
// Some platforms insert ids and others don't need to...
|
||||
assertSql(sql.get(1))
|
||||
.matches(
|
||||
"txn\\[] insert into ordered_parent \\((id, )?order_master_inheritance_id, dtype, common_name, ordered_aname, sort_order\\).*");
|
||||
assertSql(sql.get(3))
|
||||
.matches(
|
||||
"txn\\[] insert into ordered_parent \\((id, )?order_master_inheritance_id, dtype, common_name, ordered_bname, sort_order\\).*");
|
||||
|
||||
OrderMasterInheritance result = Ebean.find(OrderMasterInheritance.class).findOne();
|
||||
assertThat(result.getReferenced())
|
||||
.extracting(OrderedParent::getCommonName)
|
||||
.containsExactly("commonOrderedA", "commonOrderedB");
|
||||
|
||||
// Swap the two
|
||||
result.getReferenced().add(0, result.getReferenced().remove(1));
|
||||
assertThat(result.getReferenced())
|
||||
.extracting(OrderedParent::getCommonName)
|
||||
.containsExactly("commonOrderedB", "commonOrderedA");
|
||||
|
||||
LoggedSql.start();
|
||||
Ebean.save(result);
|
||||
sql = LoggedSqlCollector.stop();
|
||||
assertThat(sql).hasSize(3);
|
||||
assertThat(sql.get(0)).contains("update ordered_parent set sort_order=? where id=?");
|
||||
|
||||
result = Ebean.find(OrderMasterInheritance.class).findOne();
|
||||
assertThat(result.getReferenced())
|
||||
.extracting(OrderedParent::getCommonName)
|
||||
.containsExactly("commonOrderedB", "commonOrderedA");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package org.tests.inheritance.order;
|
||||
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.OneToMany;
|
||||
import javax.persistence.OrderColumn;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
public class OrderMasterInheritance {
|
||||
|
||||
@Id
|
||||
Integer id;
|
||||
|
||||
@OneToMany(cascade = CascadeType.ALL)
|
||||
@OrderColumn(name = "sort_order")
|
||||
List<OrderedParent> referenced = new ArrayList<>();
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(final Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public List<OrderedParent> getReferenced() {
|
||||
return referenced;
|
||||
}
|
||||
|
||||
public void setReferenced(final List<OrderedParent> referenced) {
|
||||
this.referenced = referenced;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.tests.inheritance.order;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
|
||||
@Entity
|
||||
public class OrderedA extends OrderedParent {
|
||||
|
||||
String orderedAName;
|
||||
|
||||
public String getOrderedAName() {
|
||||
return orderedAName;
|
||||
}
|
||||
|
||||
public void setOrderedAName(final String orderedAName) {
|
||||
this.orderedAName = orderedAName;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.tests.inheritance.order;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
|
||||
@Entity
|
||||
public class OrderedB extends OrderedParent {
|
||||
|
||||
String orderedBName;
|
||||
|
||||
public String getOrderedBName() {
|
||||
return orderedBName;
|
||||
}
|
||||
|
||||
public void setOrderedBName(final String orderedBName) {
|
||||
this.orderedBName = orderedBName;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package org.tests.inheritance.order;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Inheritance;
|
||||
|
||||
@Entity
|
||||
@Inheritance
|
||||
public abstract class OrderedParent {
|
||||
|
||||
@Id
|
||||
Integer id;
|
||||
|
||||
String commonName;
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(final Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getCommonName() {
|
||||
return commonName;
|
||||
}
|
||||
|
||||
public void setCommonName(final String commonName) {
|
||||
this.commonName = commonName;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user