领域版本的对象

时间:2017-07-27 17:44:45

标签: android ios realm

TL; DR:我们正在寻找一种实施"版本化"在Realm中的对象,所以" last"版本可以快速访问(只需按主键),并创建一个"历史"版本来自" last"更新之前的版本很简单,以及访问该对象的所有旧版本。

一些背景。

我们正在实施Realm作为Android应用程序中SQLite的替代品,并且"从头开始"在iOS应用程序中。我们为这两个应用程序提供了统一的后端,并希望在平台之间尽可能保持Realm对象表示。

在SQLite中,我们有2个表具有基本相同的结构,一个表具有每个对象的最后一个版本,第二个表 - 所有以前的版本。在更新" main"之前表,我们将要更新的行复制到"历史记录"表,然后进行更新。

1 个答案:

答案 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,但它将成为一个非托管实例。