You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Room:仅当Year与Week组合不存在时插入新条目

实现Room中基于Year+Week组合唯一的插入逻辑

要实现「仅当Year和Week的组合不存在时才插入」的逻辑,核心是先在数据库层面给这两个字段加联合唯一约束,再配合Dao的插入策略就行,具体步骤如下:

  • 给Week实体类添加联合唯一索引
    得在Week数据类的@Entity注解里,指定Year和Week字段的组合为唯一值,这样Room会在数据库里创建对应的唯一索引,当插入重复的Year+Week组合时就会触发冲突。示例代码:

    @Entity(
        tableName = "weeks",
        indices = [Index(value = ["year", "week"], unique = true)]
    )
    data class Week(
        @PrimaryKey(autoGenerate = true) val id: Int = 0,
        val year: Int,
        val week: Int
        // 其他字段按需添加
    )
    
  • 利用已有的Dao方法完成插入
    你写的initInsertWeek方法已经满足需求了,因为OnConflictStrategy.IGNORE会在触发唯一约束冲突时,直接跳过这次插入操作,既不会报错,也不会修改已存在的记录。调用这个方法时:

    • 如果Year+Week组合不存在:正常插入新条目
    • 如果组合已存在:本次插入被忽略,无任何操作

最终Dao代码保持你原来的写法即可:

@Dao
interface WeeksDao {

    @Upsert
    suspend fun upsertWeek(week: Week)

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    suspend fun initInsertWeek(week: Week)
}

内容的提问来源于stack exchange,提问作者SkAppCoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:13:13