Docs 菜单

Docs 主页开发应用程序Atlas Device SDKs

模型数据 - Java SDK

在此页面上

  • Realm 应用程序
  • 关系
  • Realm 对象
  • RealmProxy
  • Realm 对象限制
  • 增量构建
  • 模式版本
  • 迁移

对象模式是一种配置对象,用于定义 Realm 对象类型的字段和关系。Android Realm 应用程序使用 Realm 模式通过 Java 或 Kotlin 类定义对象模式。

对象模式指定对对象字段的约束,例如每个字段的数据类型、字段是否必填以及默认字段值。模式还可以定义 Realm 中对象类型之间的关系

修改应用程序的 Realm 模式需要您数据从旧版本的 Realm 模式迁移到新版本。

每个应用程序都有一个Realm 模式,由该应用程序中 Realm 可能包含的每种对象类型的对象模式列表组成。

Realm 保证 Realm 中的所有对象都符合其对象类型的模式,并在创建、修改或删除对象时验证对象。

使用 Atlas Device Sync 的应用程序可以通过两种方式定义模式:

您可以使用 RealmObject 字段在 Realm 中建立 一对一 关系模型。您可以对 RealmList 字段 的一对多 多对一 关系进行建模。反向关系是 一对多 多对一 关系的另一端。您可以使用 RealmResults 字段上的 @LinkingObjects 注解,建立可遍历的 反向 关系。在RealmObject 的实例中,反向关系字段包含通过所描述的关系指向该对象实例的 Realm 对象集。您可以通过手动查询找到同一组 Realm 对象,但反向关系字段会减少样板查询代码和出错的可能性。

与包含自己数据的普通 Java 对象不同,Realm 对象不包含数据。 相反,Realm 对象会直接向 Realm 读取和写入属性。

Realm 对象的实例可以是托管的,也可以是非托管的。

  • 托管对象包括:

    • 在 Realm 中持久化

    • 始终保持最新状态

    • 线程限制

    • 通常比非托管版本更轻量,因为它们在 Java 堆上占用的空间更少。

  • 非托管对象就像普通的 Java 对象一样,因为它们不会持久化,也从不自动更新。 您可以跨线程自由移动非托管对象。

您可以使用realm.copyToRealm()realm.copyFromRealm() 在这两种状态之间进行转换。

RealmProxy类是 Realm SDK 确保 Realm 对象本身不包含任何数据的方法。 相反,每个类的RealmProxy会直接访问数据库中的数据。

对于项目中的每个模型类,Realm 注解处理器都会生成相应的RealmProxy类。 此类扩展了您的模型类,并在您调用Realm.createObject()时返回。 在您的代码中,该对象的工作方式与模型类相同。

Realm 对象:

  • 不能包含使用finalvolatile修饰符的字段(反向关系字段除外)。

  • 不能扩展除RealmObject之外的任何对象。

  • 必须包含一个空构造函数(如果您的类不包含任何构造函数,则自动生成的空构造函数就足够了)

命名限制:

  • 类名不能超过 57 个字符。

  • 类名在域模块中必须是唯一的

  • 字段名称不能超过 63 个字符。

大小限制:

  • Stringbyte[]字段不能超过 16 MB。

使用限制:

  • 由于 Realm 对象是活动的,可以随时更改,因此它们的hashCode()值可能会随着时间的推移而变化。 因此,您不应将RealmObject实例用作任何映射或集中的键。

Realm 使用的字节码转换器支持增量构建,但在从 Realm 对象字段中添加或删除以下内容时,您的应用程序需要完全重建:

  • @Ignore注解

  • static关键字

  • transient关键字

在这些情况下,您可以使用Build > Clean ProjectBuild > Rebuild Project执行完全重建。

模式版本可标识 Realm 模式在某个时间点的状态。Realm 会跟踪每个 Realm 的模式版本,并使用该信息将每个 Realm 中的对象映射到正确的模式。

模式版本是指打开 Realm 时可包含在 Realm 配置中的整数。如果客户端应用程序在打开 Realm 时未指定版本号,则该 Realm 默认采用 0 版本。

重要

单调递增版本

迁移必须将 域 更新到更高的模式版本。 如果客户端应用程序打开的 Realm 的模式版本低于该 Realm 的当前版本,或者指定的模式版本与该 Realm 的当前版本相同但包含不同的对象模式,则 Realm 会引发错误。

本地迁移是针对不会自动与另一个 Realm同步的 Realm 的迁移。本地迁移可以访问现有的 Realm 模式、版本和对象,并定义以增量方式将 Realm 更新到新模式版本的逻辑。要执行本地迁移,您必须指定高于当前版本的新模式版本,并在打开过时 Realm 时提供迁移函数。

借助 SDK,您可以使用手动迁移来更新底层数据,以反映模式更改。在此类手动迁移期间,您可以在模式中添加或删除属性时定义新的和已删除的属性。通过DynamicRealm公开的可编辑模式为重命名字段提供了便利的功能。这样,您就可以在复杂的模式迁移期间完全控制数据的行为。

提示

应用程序开发期间的迁移

在应用程序开发过程中, RealmObject类可能会频繁更改。您可以使用Realm.deleteRealm()删除数据库文件,无需为测试数据编写完整迁移。

← 加密 Realm — Java SDK