android - 在 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)
}
解决方案
您可以指定@Update
并传递它可以工作的 POJO。
@Update
void updateUsers(List<User> users);
或者
@Update
void updateUser(User user);
你的 POJO 应该是
@Entity(tableName = "user")
public class User
{
//class menbers
}
这对我有用..
推荐阅读
- haskell - Haskell 列表重复项(如果可能,使用 map、elem 和 foldr)
- reactjs - 调用的突变返回false,但对象是在数据库中创建的
- onenote - OneNote - 无法在 Microsoft 文档中找到所有属性 ID
- swiftui - 如何更改/定义文本位置
- java - 执行查询 CallableStatement 时出现 NullPointerException
- node.js - Mongoose 使用动态地图与使用嵌套文档
- python - 在while循环期间条件改变了,它结束了吗?
- php - URL 设置为 Cookie 值未正确编码
- java - 将列表中的数组添加到Java中的新集合中
- spring - 如何在 Spring 中创建一个 Gradle 任务以仅运行特定的测试