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
相关产品推荐
相关产品推荐

