领域一对多关系未持久

时间:2019-01-11 12:45:28

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

我正在尝试在Many-to-many relationshipRealm对象之间用User实现一个Chat。我正在关注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),但结果相同。

1 个答案:

答案 0 :(得分: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);
    });
}