Получить два списка в одном объекте из двух таблиц, используя комнату - PullRequest
0 голосов
/ 15 марта 2019

С моего сервера я получаю объект MyResponse, который содержит два списка:

data class MyResponse(
    var field: List<Field>?,
    var group: List<Group>?
)

И затем я сохраняю его в две разные таблицы, используя ROOM

@Dao
interface MyDao {
    @Insert
    fun saveField(field: List<SavedField>)

    @Insert
    fun saveGroup(group: List<SavedGroup>)
}

SavedField

@Entity
data class SavedField (
        @ColumnInfo(name = "field")
        var field: String
) {
    @PrimaryKey(autoGenerate = true)
    var id: Int = 0
}

SavedGroup

@Entity
data class SavedGroup(
        @ColumnInfo(name = "group")
        var group: String
) {
    @PrimaryKey(autoGenerate = true)
    var id: Int = 0
}

Но как снова получить объект MyResponse после записи данных в базу данных?Конечно, я могу использовать два @Query для каждой таблицы, но я не думаю, что это лучшее решение.

1 Ответ

1 голос
/ 15 марта 2019

Проверьте, может ли вам помочь следующий код.

Решение 1

@Query("SELECT * FROM Field")
List<FieldAndGroup> findFieldAndGroup();

public class FieldAndGroup {
    @Embedded
    Field field;

    @Relation(parentColumn =  "Field.feild_id", entityColumn = "Group.id")
    //Relation returns a list
    //Even if we only want a single Bar object .. 
    List<Group> group;

    //Getter and setter...
}

Решение 2

@Query("SELECT Group.*, Field.* FROM Group INNER JOIN Field ON Field.grpId = Group.id")
List<GroupAndField> findAllGroupAndField();

public class GroupAndField {
    @Embedded
    Group group;

    @Embedded
    Field field;

    //Getter and setter...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...