更新领域表

时间:2016-09-14 23:45:48

标签: java android realm

我只是想知道我在更新整个表格时所做的是否是正确的安全方法。我从服务器收到一个对话列表,并像这样更新我的数据库:

@Override
public void saveConversations(final List<Conversation> conversations) {
    realm.executeTransactionAsync(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {

            // Remove all conversations and replace with the one passed in
            // Realm does not support cascade deletes. Remove messages as well
            // https://github.com/realm/realm-java/issues/1104
            realm.delete(Conversation.class);
            realm.delete(Message.class);

            realm.copyToRealmOrUpdate(conversations);
        }
    });
}

Conversation.java里面有一个RealmList消息:

public class Conversation extends RealmObject {

    private RealmList<Message> messages = new RealmList<>();

这很有效,我找不到它的任何错误,但它看起来并不特别优雅。如果realm.copyToRealmOrUpdate(conversations);出错怎么办?我会丢失所有数据。

无论如何,我知道这不太可能,但我想知道是否有更好的做事方式。

PS:请记住,我从数据库中删除了所有内容,因为我不希望我的数据库中的对话不再存在于服务器中。

1 个答案:

答案 0 :(得分:0)

请勿忘记您正在执行交易,因此如果copyToRealmOrUpdate()失败,则交易取消,这意味着您不会丢失你的所有数据。

就个人而言,我过去常常使用&#34;删除所有&#34;方法,如果您可以清除所有表格,那么它不会导致问题,但如果您有第三个表格,您指的是ConversationMessage(例如{ {1}}),您将使所有关系无效。所以我个人更喜欢像这样合并。

  • 合并数据并删除您未保存的列表中的所有数据

User.class

然后合并:

public class Contact {
    @PrimaryKey
    private long id;

    @Index
    private String name;

    @Index
    private String phoneNumber;

    @Index
    private boolean isBeingSaved; // this line is important

    //getters, setters
}