Установить значение для объекта области

У меня есть следующий класс

public class Student extends RealmObject{
private int studentID;
private String studentName;

// getters and setters here

}

Затем я пытаюсь установить значение уже созданному объекту-ученику

student.setStudentName("Peter");

Затем я получаю следующую ошибку

java.lang.IllegalStateException: вызов метода Mutable во время чтения сделка.

Чтобы преодолеть это, я должен сделать это следующим образом

Realm realm = Realm.getInstance(this);
realm.beginTransaction();
student.setStudentName("Peter");
realm.commitTransaction();

Я не хочу сохранять это изменение в базе данных. Как я могу просто задать/изменить значение для переменной объекта realm, не сохраняя ее всегда в базе данных?

Ответ 1

Если вы хотите изменить объект в ненастроенной форме, вам нужна неуправляемая копия.

Вы можете создать копию, используя метод realm.copyFromRealm(RealmObject realmObject);.

Ответ 2

Когда вы используете Realm.createObject(), объект добавляется в Realm, и он работает только в транзакции записи. Вы можете отменить транзакцию и тем самым отказаться от объекта.

Кроме того, вы можете использовать свой класс модели как самостоятельный класс и создавать объекты в памяти (подробнее см. http://realm.io/docs/java/0.80.0/#creating-objects). Если вам нужно сохранить объекты, вы можете использовать метод Realm.copyToRealm().

Ответ 3

Возможно, вы захотите создать новую модель. И ваша новая модель должна реализовывать RealmModel.

public class StudentRM extends RealmModel{
private int studentID;
private String studentName;

// Constructors here
// getters and setters here

}

Теперь вы можете сделать это.

studentRm.setStudentName("Peter"); //Setting Vale Or
studentRm.addAll(student); //Add all value from DB
studentRm.setStudentName("Jhon"); //It won't change DB anymore
studentRm.getStudentName(); // "Jhon"

Ответ 4

Вы можете использовать realm.cancelTransaction(); вместо realm.commitTransaction();