Room Database覆盖插入的对象

时间:2017-11-20 08:22:40

标签: android kotlin android-room

我有这样的实体对象:

@Entity(tableName = "woks", foreignKeys = arrayOf(ForeignKey(
    entity = Order::class,
    parentColumns = arrayOf("entryid"),
    childColumns = arrayOf("order_id"),
    onDelete = ForeignKey.CASCADE
)))
data class Wok(
    val order_id: String
) {
    @ColumnInfo(name = "id")
    @PrimaryKey(autoGenerate = true)
    var id: Long = 0
}

并以这种方式定义了我的DAO文件中的插入:

@Insert(onConflict = OnConflictStrategy.IGNORE)
abstract fun insertWok(wok: Wok): Long

正如您所看到的那样,冲突被忽略,所以当我试图再次插入同一个对象时,它将覆盖该对象并继续增加id。

所以我想要实现的是多次插入同一个对象

2 个答案:

答案 0 :(得分:1)

要多次插入对象,需要更改主键。 房间是基于它来知道它是否是一个新的对象。

答案 1 :(得分:0)

我已经尝试了多种可能的组合,这些组合可以与您提供的信息一起使用,但我没有像您所说的那样附带任何内容。

您能否请您分享更多信息,例如您的施工方,如何创建工作对象, 实际发生了什么(前后)

这可能会发生,   如果在传递给insertWork方法时您的工作对象ID为0 如果您放置两个ID均为0的相同对象,则由于autogenrate = true,room将自动为其生成id,并且由于room将创建唯一的id,因此这些对象将被视为不同的对象。