我不确定我是否了解他们之间的区别:
如我所见,realm.createObject不能真正更新现有密钥(得到错误:主键值已存在)

选项1:

    try (Realm realm = Realm.getDefaultInstance()) {
        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(@NonNull Realm realm) {
                CacheFastObjTest a = realm.createObject(CacheFastObjTest.class, key);
                a.setDataType(className.getName());
                a.setExpireTimestamp(expires.getTime());
                a.setText1("dsaf");
                a.setText2("234234324");
                realm.insertOrUpdate(a);
            }
        });
    }


选项2:

    try (Realm realm = Realm.getDefaultInstance()) {
        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(@NonNull Realm realm) {
                CacheFastObjTest a = new CacheFastObjTest();
                a.setKey(key);
                a.setDataType(className.getName());
                a.setExpireTimestamp(expires.getTime());
                a.setText1("dsaf");
                a.setText2("234234324");
                realm.insertOrUpdate(a);
            }
        });
    }

最佳答案

CacheFastObjTest a = realm.where(CacheFastObjTest.class).equalTo("id", key).findFirst();
if(a == null) {
     a = realm.createObject(CacheFastObjTest.class, key);
}
a.setDataType(className.getName());
a.setExpireTimestamp(expires.getTime());
a.setText1("dsaf");
a.setText2("234234324");
//realm.insertOrUpdate(a);

09-10 13:57
查看更多