TL; DR:我们正在寻找一种实施"版本化"在Realm中的对象,所以" last"版本可以快速访问(只需按主键),并创建一个"历史"版本来自" last"更新之前的版本很简单,以及访问该对象的所有旧版本。
一些背景。
我们正在实施Realm作为Android应用程序中SQLite的替代品,并且"从头开始"在iOS应用程序中。我们为这两个应用程序提供了统一的后端,并希望在平台之间尽可能保持Realm对象表示。
在SQLite中,我们有2个表具有基本相同的结构,一个表具有每个对象的最后一个版本,第二个表 - 所有以前的版本。在更新" main"之前表,我们将要更新的行复制到"历史记录"表,然后进行更新。
答案 0 :(得分:0)
Welp,我能想到的唯一选择是
有两个基本相同结构的表,一个具有每个对象的最后一个版本,第二个 - 所有以前的版本。
关键区别在于历史表没有主键(或者它是通过将原始主键与版本号相结合而构建的)。
public class Dog extends RealmObject {
@PrimaryKey
private String dogId;
@Index
private String dogName;
private int version;
}
public class DogHistory extends RealmObject {
private String dogId; // decide if primary key from dogId+version is needed
@Index
private String dogName;
private int version;
}
然后将它们映射过来。
DogHistory dogHistory = new DogHistory();
dogHistory.setDogId(currentDog.getDogId());
dogHistory.setDogName(currentDog.getDogName());
dogHistory.setVersion(currentDog.getVersion());
realm.insert(dogHistory); //not "insertOrUpdate" if no PK field
棘手的是,你只能将它们视为"相同的对象"如果你通过接口公开getters / setters。或者您将它们映射回Dog
,但它将成为一个非托管实例。