【问题标题】:Realm one to many relationship not persisted领域一对多关系不持久
【发布时间】:2019-01-11 12:45:27
【问题描述】:

我正在尝试在UserChat 对象之间实现Many-to-many relationshipRealm。我正在关注the oficial documentation。这是我的对象。

 public class User implements RealmModel {

  @PrimaryKey
  private String userId;
  private String name;
  private String phone;
  private String pictureURL;
  private String thumbnailURL;
  private String pushToken;
  private String status;
  private long lastOnlineMs;
  public RealmList<Chat> chats = new RealmList<>();

  public User() {}

}  

public class Chat implements RealmModel {

  @Required
  @PrimaryKey
  private String chatId;
  private long creationDateMs;
  private String creatorUserId;
  private String name;

  @LinkingObjects("chats")
  public final RealmResults<User> users = null;

  private int chatType;


  public Chat() {}
 }

这是我在数据库中创建Chat 对象并添加关系的代码。用户之前已正确创建:

public void addChat(final Chat chat, final User creatorUser, final User opponentUser ) {
    realm.executeTransaction(realm -> {
        realm.copyToRealmOrUpdate(chat);

        creatorUser.chats.add(chat);
        opponentUser.chats.add(chat);
    });
}

执行代码后UserChat 对象存储在数据库中,但用户的chat list 为空。

我也用realm.beginTransaction,和executeTransaction一样,只是执行的区别是线程安全的。

我也使用realm.insertOrUpdate(obj),但结果相同。

【问题讨论】:

    标签: android database realm persistence one-to-many


    【解决方案1】:

    copyToRealmOrUpdate 来自文档:

    更新由相同 {@link io.realm.annotations.PrimaryKey} 标识的现有 RealmObject,如果找不到现有对象,则更新新副本

    它不会更新您作为参数提供的 RealmObject,因为它还不是托管对象,因此您需要检索托管的返回对象以将其添加到您的用户。

    public void addChat(final Chat chat, final User creatorUser, final User opponentUser ) {
        realm.executeTransaction(realm -> {
            Chat managedChat = realm.copyToRealmOrUpdate(chat);
            creatorUser.chats.add(managedChat);
            opponentUser.chats.add(managedChat);
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      相关资源
      最近更新 更多