DAO:如何使用插入的返回值

时间:2019-11-24 22:23:11

标签: android database kotlin android-room dao

根据the documentation@Insert函数可以返回long,它是插入项目的新rowId。如何使用返回值?

@Dao
interface TodoDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
        fun insert(todo: TodoItem): Long
}

请注意,id的{​​{1}}是自动生成的。

@Entity

这里是整个@PrimaryKey(autoGenerate = true) 实体。

TodoItem

1 个答案:

答案 0 :(得分:1)

如果id on TodoItem is a var , you could assign the return value to id`,那么您的实体现在具有其生成的主键,可用于将来的DAO操作。


如果要使用@Parcelize,请确保所有基本属性都在data class构造函数中。就目前而言,您的todoId属性不会放入Parcel中。

@Entity(tableName = "todos")
@Parcelize
data class TodoItem(
    val text: String,
    val priority: Priority,
    @PrimaryKey(autoGenerate = true) var todoId: Long = 0
) : Parcelable

然后,给一个名为entity的实体和一个名为dao的DAO:

entity.todoId = dao.insert(entity)