Получить данные, объединяющие две таблицы в комнате с одинаковым идентификатором столбца - PullRequest
1 голос
/ 06 мая 2020

Привет, я использую две таблицы student и student_address с общим идентификатором столбца в качестве идентификатора uid в обеих таблицах (который не может быть изменен ни при каких условиях)

Я использую класс StudentAndAddress как

public class StudentAndAddress{

    @Embedded
    private Student student;

    @Embedded(prefix = "type_")
    private StudentAddress studentAddress;

    public Address getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

    public StudentAddress getStudentAddress() {
        return studentAddress;
    }

    public void setStudentAddress(StudentAddress studentAddress) {
        this.studentAddress = studentAddress;
    }

}

и запрос, который я использую как:

@Query("SELECT * FROM student  INNER JOIN student_address ON student.uid == student_address.address_uid and address_link.linkto_type==:linkToType")
LiveData<List<StudentAndAddress>> getStudentAndAddress(String linkToType);

Я получаю значение первой таблицы, но не получаю значение второй таблицы. В базе данных есть обе таблицы

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

В комнате нам нужно решить этот тип запросов, используя отношение

public class StudentAndAddress{

    @Embedded
    private StudentAddress studentAddress;


    @Relation(
            parentColumn = "address_uid",
            entityColumn = "uid",
            entity = Student.class
    )
    private Student student;


    public Address getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

    public StudentAddress getStudentAddress() {
        return studentAddress;
    }

    public void setStudentAddress(StudentAddress studentAddress) {
        this.studentAddress = studentAddress;
    }

}

и запрос, который нам нужно написать: -

@Query("SELECT * FROM student_address WHERE linkto_type==:linkToType")
LiveData<List<StudentAndAddress>> getStudentAndAddress(String linkToType);
0 голосов
/ 06 мая 2020

Я думаю, источником вашей проблемы является префикс, который вы дали своему @Embedded:

@Embedded(prefix = "type_")
private StudentAddress studentAddress;

С этой комнатой не может сопоставить имена полей в результате запроса и поля в вашем классе StudentAndAddress. Вам нужно либо избавиться от префикса (тогда имена файловых файлов будут равны), либо изменить псевдонимы в вашем запросе для таблицы адресов (чтобы добавить к ним свой префикс) - примерно так:

@Query("SELECT student.*,addresses.[field1] as type_[field1], adsresses.address_uid as type_address_uid, ... FROM student  INNER JOIN student_address as addresses ..."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...