#462 - No effective change, reformat code ... When fetching, collections can get populated with too many entities -

This commit is contained in:
Robin Bygrave
2016-02-12 23:32:43 +13:00
parent 5721fe3807
commit f0b80068b6
5 changed files with 120 additions and 94 deletions
@@ -1,32 +1,38 @@
package com.avaje.tests.model.survey;
import javax.persistence.*;
import java.util.*;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import java.util.List;
@Entity
public class Category {
@Id
public Long id;
@Id
public Long id;
@ManyToOne
@JoinColumn(name = "surveyObjectId")
private Survey survey;
@ManyToOne
@JoinColumn(name = "surveyObjectId")
private Survey survey;
@OneToMany(mappedBy = "category", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@OrderBy("sequenceNumber")
private List<Group> groups;
@OneToMany(mappedBy = "category", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@OrderBy("sequenceNumber")
private List<Group> groups;
private int sequenceNumber;
private int sequenceNumber;
public List<Group> getGroups() {
return groups;
}
public List<Group> getGroups() {
return groups;
}
public void setGroups(List<Group> groups) {
this.groups = groups;
}
public void setGroups(List<Group> groups) {
this.groups = groups;
}
public void setSequenceNumber(int number) {
this.sequenceNumber = number;
}
public void setSequenceNumber(int number) {
this.sequenceNumber = number;
}
}
@@ -1,33 +1,41 @@
package com.avaje.tests.model.survey;
import javax.persistence.*;
import java.util.*;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name="survey_group")
@Table(name = "survey_group")
public class Group {
@Id
public Long id;
@Id
public Long id;
@ManyToOne
@JoinColumn(name = "categoryObjectId")
private Category category;
@ManyToOne
@JoinColumn(name = "categoryObjectId")
private Category category;
@OneToMany(mappedBy = "group", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@OrderBy("sequenceNumber")
private List<Question> questions = new ArrayList<Question>();
@OneToMany(mappedBy = "group", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@OrderBy("sequenceNumber")
private List<Question> questions = new ArrayList<Question>();
private int sequenceNumber;
private int sequenceNumber;
public List<Question> getQuestions() {
return questions;
}
public List<Question> getQuestions() {
return questions;
}
public void setQuestions(List<Question> questions) {
this.questions = questions;
}
public void setQuestions(List<Question> questions) {
this.questions = questions;
}
public void setSequenceNumber(int number) {
this.sequenceNumber = number;
}
public void setSequenceNumber(int number) {
this.sequenceNumber = number;
}
}
@@ -1,20 +1,23 @@
package com.avaje.tests.model.survey;
import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
public class Question {
@Id
public Long id;
@Id
public Long id;
@ManyToOne
@JoinColumn(name = "groupObjectId")
private Group group;
@ManyToOne
@JoinColumn(name = "groupObjectId")
private Group group;
private int sequenceNumber;
private int sequenceNumber;
public void setSequenceNumber(int number) {
this.sequenceNumber = number;
}
public void setSequenceNumber(int number) {
this.sequenceNumber = number;
}
}
@@ -1,22 +1,26 @@
package com.avaje.tests.model.survey;
import javax.persistence.*;
import java.util.*;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import java.util.List;
@Entity
public class Survey {
@Id
public Long id;
@Id
public Long id;
@OneToMany(mappedBy = "survey", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@OrderBy("sequenceNumber")
private List<Category> categories;
@OneToMany(mappedBy = "survey", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@OrderBy("sequenceNumber")
private List<Category> categories;
public List<Category> getCategories() {
return categories;
}
public List<Category> getCategories() {
return categories;
}
public void setCategories(List<Category> categories) {
this.categories = categories;
}
public void setCategories(List<Category> categories) {
this.categories = categories;
}
}
@@ -2,16 +2,13 @@ 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.jetbrains.annotations.NotNull;
import org.junit.Test;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
public class TestOrderByFetch extends BaseTestCase {
@@ -24,44 +21,52 @@ public class TestOrderByFetch extends BaseTestCase {
category.setSequenceNumber(1);
categories.add(category);
survey.setCategories(categories);
List<Group> groups = new ArrayList<Group>();
Group group1 = new Group();
group1.setSequenceNumber(1);
Group group2 = new Group();
group2.setSequenceNumber(2);
List<Group> groups = new ArrayList<Group>();
Group group1 = group(1);
Group group2 = group(2);
groups.add(group1);
groups.add(group2);
category.setGroups(groups);
List<Question> questionListGroup1 = new ArrayList<Question>();
Question q1 = new Question();
q1.setSequenceNumber(1);
Question q2 = new Question();
q2.setSequenceNumber(2);
questionListGroup1.add(q1);
questionListGroup1.add(q2);
questionListGroup1.add(question(1));
questionListGroup1.add(question(2));
questionListGroup1.add(question(3));
group1.setQuestions(questionListGroup1);
List<Question> questionListGroup2 = new ArrayList<Question>();
Question q3 = new Question();
q3.setSequenceNumber(1);
Question q4 = new Question();
q4.setSequenceNumber(2);
questionListGroup2.add(q3);
questionListGroup2.add(q4);
questionListGroup2.add(question(1));
questionListGroup2.add(question(2));
group2.setQuestions(questionListGroup2);
Ebean.save(survey);
Survey foundSurvey = Ebean.find(Survey.class)
.fetch("categories")
.fetch("categories.groups")
.fetch("categories.groups.questions")
.findUnique();
.setDisableLazyLoading(true)
.fetch("categories")
.fetch("categories.groups")
.fetch("categories.groups.questions")
.findUnique();
assertEquals(1, foundSurvey.getCategories().size());
assertEquals(2, foundSurvey.getCategories().get(0).getGroups().size());
Category category1 = foundSurvey.getCategories().get(0);
List<Group> groups2 = category1.getGroups();
assertEquals(2, groups2.size());
}
@NotNull
private Group group(int number) {
Group group1 = new Group();
group1.setSequenceNumber(number);
return group1;
}
@NotNull
private Question question(int sequence) {
Question q2 = new Question();
q2.setSequenceNumber(sequence);
return q2;
}
}