【问题标题】:Get two lists in one object from two tables using room使用房间从两个表中获取一个对象中的两个列表
【发布时间】:2019-03-15 09:47:11
【问题描述】:

我正在从我的服务器接收对象 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>)
}

已保存字段

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

已保存组

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

但是如何在将数据写入数据库后再次获取MyResponse 对象?当然,我可以为每个表使用两个@Query,但我认为这不是最好的解决方案。

【问题讨论】:

    标签: java android sqlite kotlin android-room


    【解决方案1】:

    检查以下代码可能会对您有所帮助。

    解决方案 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...
    }
    

    【讨论】:

    • @Embedded 确实是我认为 OP 正在寻找的东西。
    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2013-06-27
    • 2011-10-29
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多