2017-07-14 61 views
4

我遇到了一個問題,我不確定如何解決它。我目前正在開發的項目有一個模型,其中部分由後端存儲的數據和來自本地數據庫的數據組成。 那麼我想存檔是類似的東西:Android房間部分更新如果退出

文章:[資訊的一羣] & [布爾訂閱]

的認購現場是約束裝置,不應該體現在後端的任何數據。我的問題是,如果有可能在房間實現某種createIfNotExit()方法,處理下列情況:

  • 文章不是本地演示:存儲副本,並設置訂閱到 虛假目前
  • 文章:更新所有的信息,並保持 訂閱標誌不變

我的想法是把模型分成單獨的訂閱模式保持到第一個參考。這種方式,我可以通過簡單地通過@Update(OnConfict=Update)等簡單地實現它...

有沒有辦法在DAO中實現我想要的一個簡單的@Query方法?

對不起,如果這是一個非常基本的問題,但我找不到任何關於處理這種情況的最佳實踐的材料。

預先感謝您!

+0

添加您的實體說明。我需要PrimaryKeys來編寫答案 – DeKaNszn

+0

嗯,我剛開始規劃應用程序,這一點是我不明白的問題><我需要的是沒有什麼特別的,但是這種情況下的通用示例:) – HugoCodes

回答

2

例如,你的實體是:

@Entity(tableName = "articles") 
public final class Article { 
    @PrimaryKey 
    public long serverId; 
    public String title; 
    public String url; 

    public boolean isSubscribed; 
} 

你可以寫在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); 

另一種選擇 - 在你的倉庫寫這個邏輯,用兩個簡單的操作:選擇並更新

+0

好吧,謝謝這應該正是我正在尋找的:-) – HugoCodes

+2

好吧其實我不允許在空間中使用INSERT命令。 – HugoCodes

+0

@HugoCodes您是如何在房間中實現insertOrUpdate問題的?請分享任何想法和代碼示例。 – nAkhmedov