我遇到了一个问题,我不确定如何解决它.我正在处理的项目目前有一个模型,该模型部分包括后端存储的数据和来自本地数据库的数据.
所以我想要存档的是这样的:
文章:[信息束]& [boolean Subscribed]
订阅字段是设备绑定的,不应反映后端的任何数据.我的问题是,是否可以在Room中实现某种处理以下情况的createIfNotExit()方法:
>本地不存在的文章:存储副本并设置订阅
假
>文章目前:更新所有信息并保持
订阅 – 标记未触及
我的想法是将模型拆分为一个单独的订阅模型,其中包含对文章的引用.这样我就可以通过@Update(OnConfict = Update)等来实现它……
有没有办法在DAO中实现一个简单的@Query方法来执行我想要的?
很抱歉,如果这是一个非常基本的问题,但我找不到任何有关处理此案例的最佳做法的材料.
先感谢您!
最佳答案
例如,您的实体是:
@Entity(tableName = "articles") public final class Article { @PrimaryKey public long serverId; public String title; public String url; public boolean isSubscribed; }
@H_403_31@您可以在DAO中编写此方法:
@Query("INSERT OR REPLACE INTO articles (serverId,title,url,isSubscribed) VALUES (:id,:title,:url,COALESCE((SELECT isSubscribed FROM articles WHERE id = :id),0));") void insertOrUpdateArticle(long id,String title,String url);
@H_403_31@另一种选择 – 在您的存储库中编写此逻辑并使用两个简单的操作:选择和更新