首页 > 解决方案 > 在 DAO 查询方法中传递 POJO 作为参数来更新列的子集?

问题描述

Room 允许您从查询方法中返回任意 POJO,只要 POJO 的字段与查询结果中的列名匹配。

我很好奇是否可以做相反的事情..将 POJO 传递给查询方法以更新特定列。

@Entity
data class Quiz(
        @PrimaryKey
        val id: Int,
        val completedCount: Int,
        val bestScore: Int,
        @Embedded val stats: Stats
)

data class Stats(
        val right: Int,
        val wrong: Int
)

@Dao
interface QuizDao {

    // OK.. passing in each column to be updated
    @Query("update quiz set `right` = :right, wrong = :wrong, where id = :id")
    fun updateStats(id: Int, right: Int, wrong: Int)

    // ERROR.. POJO fields can't be mapped to columns
    @Query("update quiz set `right`, wrong where id = :id")
    fun updateStats(id: Int, stats: Stats)
}

标签: androidandroid-room

解决方案


您可以指定@Update并传递它可以工作的 POJO。

@Update 
void updateUsers(List<User> users);

或者

@Update
void updateUser(User user);

你的 POJO 应该是

@Entity(tableName = "user")   
public class User
{
    //class menbers
}

这对我有用..


推荐阅读