Android Room UPSERT功能不符合预期的问题咨询
Android Room UPSERT功能实现疑问
按照Android Room官方文档实现UPSERT功能,编写了Playlist实体、PlayListDao、NameAndDescription POJO及对应的upsert方法,代码与文档示例完全一致,但测试时出现以下问题:
- 因
NameAndDescription不包含Playlist的主键,多次调用upsert会插入多行name重复的数据; - 为
Playlist添加name字段的唯一索引后,再次调用upsert抛出SQLiteConstraintException导致崩溃。
查看生成的PlaylistDao_Impl代码发现,Room仅在主键约束冲突时才会执行更新,非主键约束的冲突会被重新抛出异常。
现提出以下疑问:
Q1:官方文档示例是否存在错误?
Q2:实现UPSERT是否必须依赖主键?该功能相比传统INSERT+UPDATE无优势反而需依赖主键,是否存在理解误区?
内容的提问来源于stack exchange,提问作者JacksOnF1re
相关产品推荐
相关产品推荐

