这似乎是一个懒惰的问题,但官方文件字面上没有解释如何做到这一点。
https://developer.android.com/training/data-storage/room
我有这样一个实体:
@Entity
data class Shader(
@PrimaryKey(autoGenerate = true) val uid: Int,
val name: String,
val shaderMainText: String,
val paramsJson: String?
)
以及Dao
上的一些方法:
@Insert
fun insertAll(vararg shaders: Shader)
@Delete
fun delete(shader: Shader)
@Update
fun update(shader: Shader)
如何创建新记录并将其插入?
我已经得到了这个:
val record = Shader(name="Foo", shaderMainText="bar", paramsJson=null)
但是它抱怨我缺少参数uid
,为什么我需要提供一个uid
?它应该是自动生成的?
如能提供创建新记录的示例,将不胜感激。
4条答案
按热度按时间ibrsph3r1#
您可以将
0
设置为uid
字段的默认值当
autoGenerate
为true
时,Room忽略默认值,因此它创建自动递增的值。最后,这不会给予你一个编译错误:qkf9rpyu2#
医生说:
如果字段类型为long或int(或者其TypeConverter将其转换为long或int),则Insert方法在插入项时将0视为未设置。
如果字段的类型是Integer或Long(或者其TypeConverter将其转换为Integer或Long),则Insert方法在插入项时将null视为未设置。
因此,我会尝试将uid初始化为0,或者使其可为空并设置为null。
希望能有所帮助!
https://developer.android.com/reference/android/arch/persistence/room/PrimaryKey#autoGenerate()
bejyjqdl3#
你也可以这样尝试
最佳做法是始终创建
instance
类Shader
data class
,如下所示在这里,您需要创建
constructor
Shader
和insertAll
中添加数据,如下所示您的数据已成功添加
hc8w905p4#
在数据库中插入数据时,应始终存在@PrimaryKey(autoGenerate = false