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() метод в classSchool Я не мог добраться List<Pupil> после запроса - было пусто.

После этого я попытался сделать то же самое в реальном проекте, но добавив @Override за save() метод в основном классе я получаю stackru ошибка, но без нее моя коллекция не будет сохранена;

Каков правильный способ реализации One->One->Many с использованием DBFlow?

0 ответов

Другие вопросы по тегам