Android DBFlow вложил переполнение стека отношений один ко многим
Я пытался мигрировать в DBFlow
в моем проекте и столкнулся с проблемой проектирования one-to-many
связь.
Я создал три простых Class
Испытания:
@Table(database = DB.class)
public class School extends BaseModel{
@PrimaryKey
@Column
private int id;
@Column
private String name;
@Column
@ForeignKey(saveForeignKeyModel = true)
private Classroom classroom;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Classroom getClassroom() {
return classroom;
}
public void setClassroom(Classroom classroom) {
this.classroom = classroom;
}
@Override
public boolean save() {
boolean result = super.save();
if(classroom != null){
classroom.save();
}
return result;
}
}
@Table(database = DB.class)
public class Classroom extends BaseModel {
@Column
@PrimaryKey
private int id;
@Column
private String teacherName;
@Column
private String speciality;
private List<Pupil> pupils = null;
public String getTeacherName() {
return teacherName;
}
public void setTeacherName(String teacherName) {
this.teacherName = teacherName;
}
public String getSpeciality() {
return speciality;
}
public void setSpeciality(String speciality) {
this.speciality = speciality;
}
public List<Pupil> getPupils() {
return pupils;
}
public void setPupils(List<Pupil> pupils) {
this.pupils = pupils;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@OneToMany(methods = OneToMany.Method.ALL, variableName = "pupils")
public List<Pupil> oneToManyPupils() {
if (pupils == null || pupils.isEmpty()) {
pupils = SQLite.select()
.from(Pupil.class)
.where(Pupil_Table.classroom_id.eq(id))
.queryList();
}
return pupils;
}
@Override
public boolean save() {
boolean result = super.save();
if(pupils != null){
for(Pupil pupil : pupils){
pupil.setClassroom(this);
pupil.save();
}
}
return result;
}
}
@Table(database = DB.class)
public class Pupil extends BaseModel{
@Column
@PrimaryKey
private String name;
@Column
private int age;
@ForeignKey(stubbedRelationship = true)
Classroom classroom;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Classroom getClassroom() {
return classroom;
}
public void setClassroom(Classroom classroom) {
this.classroom = classroom;
}
}
Без переопределения save()
метод в class
School
Я не мог добраться List<Pupil>
после запроса - было пусто.
После этого я попытался сделать то же самое в реальном проекте, но добавив @Override
за save()
метод в основном классе я получаю stackru
ошибка, но без нее моя коллекция не будет сохранена;
Каков правильный способ реализации One->One->Many с использованием DBFlow?