DAO:如何使用 Insert 中的 return 值

DAO: How to use the return value from Insert

根据 the documentation 一个 @Insert 函数可以 return 一个 long,这是插入项目的新 rowId。如何使用 return 值?

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

请注意,我的 @Entityid 是自动生成的。

@PrimaryKey(autoGenerate = true)

这是整个 TodoItem 实体。

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

If id onTodoItemis avar, you could assign the return value toid`,那么现在你的实体有它生成的主键,用于未来的 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)