我正在尝试在Many-to-many relationship
和Realm
对象之间用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);
});
}
执行代码后,User
和Chat
对象存储在数据库中,但用户的chat list
空。
我还使用realm.beginTransaction
,它与executeTransaction
相同,只是执行的区别是线程安全的。
我也使用realm.insertOrUpdate(obj)
,但结果相同。
答案 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);
});
}