diff --git a/src/test/java/com/avaje/tests/model/survey/Category.java b/src/test/java/com/avaje/tests/model/survey/Category.java new file mode 100644 index 000000000..25936c853 --- /dev/null +++ b/src/test/java/com/avaje/tests/model/survey/Category.java @@ -0,0 +1,32 @@ +package com.avaje.tests.model.survey; + +import javax.persistence.*; +import java.util.*; + +@Entity +public class Category { + @Id + public Long id; + + @ManyToOne + @JoinColumn(name = "surveyObjectId") + private Survey survey; + + @OneToMany(mappedBy = "category", cascade = {CascadeType.PERSIST, CascadeType.MERGE}) + @OrderBy("sequenceNumber") + private List groups; + + private int sequenceNumber; + + public List getGroups() { + return groups; + } + + public void setGroups(List groups) { + this.groups = groups; + } + + public void setSequenceNumber(int number) { + this.sequenceNumber = number; + } +} \ No newline at end of file diff --git a/src/test/java/com/avaje/tests/model/survey/Group.java b/src/test/java/com/avaje/tests/model/survey/Group.java new file mode 100644 index 000000000..064ad7e95 --- /dev/null +++ b/src/test/java/com/avaje/tests/model/survey/Group.java @@ -0,0 +1,33 @@ +package com.avaje.tests.model.survey; + +import javax.persistence.*; +import java.util.*; + +@Entity +@Table(name="survey_group") +public class Group { + @Id + public Long id; + + @ManyToOne + @JoinColumn(name = "categoryObjectId") + private Category category; + + @OneToMany(mappedBy = "group", cascade = {CascadeType.PERSIST, CascadeType.MERGE}) + @OrderBy("sequenceNumber") + private List questions = new ArrayList(); + + private int sequenceNumber; + + public List getQuestions() { + return questions; + } + + public void setQuestions(List questions) { + this.questions = questions; + } + + public void setSequenceNumber(int number) { + this.sequenceNumber = number; + } +} \ No newline at end of file diff --git a/src/test/java/com/avaje/tests/model/survey/Question.java b/src/test/java/com/avaje/tests/model/survey/Question.java new file mode 100644 index 000000000..5c652a214 --- /dev/null +++ b/src/test/java/com/avaje/tests/model/survey/Question.java @@ -0,0 +1,20 @@ +package com.avaje.tests.model.survey; + +import javax.persistence.*; + +@Entity +public class Question { + @Id + public Long id; + + @ManyToOne + @JoinColumn(name = "groupObjectId") + private Group group; + + private int sequenceNumber; + + public void setSequenceNumber(int number) { + this.sequenceNumber = number; + } + +} \ No newline at end of file diff --git a/src/test/java/com/avaje/tests/model/survey/Survey.java b/src/test/java/com/avaje/tests/model/survey/Survey.java new file mode 100644 index 000000000..3c6d9d477 --- /dev/null +++ b/src/test/java/com/avaje/tests/model/survey/Survey.java @@ -0,0 +1,22 @@ +package com.avaje.tests.model.survey; + +import javax.persistence.*; +import java.util.*; + +@Entity +public class Survey { + @Id + public Long id; + + @OneToMany(mappedBy = "survey", cascade = {CascadeType.PERSIST, CascadeType.MERGE}) + @OrderBy("sequenceNumber") + private List categories; + + public List getCategories() { + return categories; + } + + public void setCategories(List categories) { + this.categories = categories; + } +} \ No newline at end of file diff --git a/src/test/java/com/avaje/tests/model/survey/TestOrderByFetch.java b/src/test/java/com/avaje/tests/model/survey/TestOrderByFetch.java new file mode 100644 index 000000000..e24599b3d --- /dev/null +++ b/src/test/java/com/avaje/tests/model/survey/TestOrderByFetch.java @@ -0,0 +1,67 @@ +package com.avaje.tests.model.survey; + +import com.avaje.ebean.BaseTestCase; +import com.avaje.ebean.Ebean; +import com.avaje.ebean.OrderBy; +import com.avaje.ebean.Query; + +import org.avaje.ebeantest.LoggedSqlCollector; +import org.junit.Assert; +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.*; + +public class TestOrderByFetch extends BaseTestCase { + + @Test + public void test() { + + Survey survey = new Survey(); + List categories = new ArrayList(); + Category category = new Category(); + category.setSequenceNumber(1); + categories.add(category); + survey.setCategories(categories); + List groups = new ArrayList(); + Group group1 = new Group(); + group1.setSequenceNumber(1); + Group group2 = new Group(); + group2.setSequenceNumber(2); + groups.add(group1); + groups.add(group2); + category.setGroups(groups); + + List questionListGroup1 = new ArrayList(); + Question q1 = new Question(); + q1.setSequenceNumber(1); + Question q2 = new Question(); + q2.setSequenceNumber(2); + questionListGroup1.add(q1); + questionListGroup1.add(q2); + group1.setQuestions(questionListGroup1); + + List questionListGroup2 = new ArrayList(); + Question q3 = new Question(); + q3.setSequenceNumber(1); + Question q4 = new Question(); + q4.setSequenceNumber(2); + questionListGroup2.add(q3); + questionListGroup2.add(q4); + group2.setQuestions(questionListGroup2); + + Ebean.save(survey); + + Survey foundSurvey = Ebean.find(Survey.class) + .fetch("categories") + .fetch("categories.groups") + .fetch("categories.groups.questions") + .findUnique(); + + assertEquals(1, foundSurvey.getCategories().size()); + assertEquals(2, foundSurvey.getCategories().get(0).getGroups().size()); + + } + +}