Room数据库插入数据时冲突策略的最优处理方案咨询
Room数据库插入数据时冲突策略的最优处理方案咨询
我在使用RoomDB插入数据时,纠结于该选择哪种冲突处理策略,试过两种方式但都存在问题:
- 尝试
@Insert(onConflict = OnConflictStrategy.REPLACE)时,遇到冲突偶尔会出现数据重复,还打乱了主键的自增序列 - 换成
@Insert(onConflict = OnConflictStrategy.NONE)后,有时候又无法替换旧数据,所以不得不换回第一种策略
更让我困惑的是,关于@Insert的冲突策略,我看到了完全矛盾的说明:
- 当我把鼠标悬停在
OnConflictStrategy.REPLACE上时,IDE提示是:"OnConflict strategy constant to replace the old data and continue the transaction";而OnConflictStrategy.NONE的提示是:"OnConflict strategy constant used by default when no other strategy is set. Using it prevents Room from generating ON CONFLICT clause. It may be useful when there is a need to use ON CONFLICT clause within a trigger. The runtime behavior is the same as when ABORT strategy is applied. The transaction is rolled back" - 但当我跳转到
OnConflictStrategy的库实现源码查看注释时,REPLACE的注释变成了*"OnConflict strategy constant to rollback the transaction.",NONE的注释却变成了"OnConflict strategy constant to replace the old data and continue the transaction."*
这种完全相反的说明让我彻底搞不清该怎么选择正确的冲突策略了。
备注:内容来源于stack exchange,提问作者Lloyd Munyai
相关产品推荐
相关产品推荐

