You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RLM_ERR_SCHEMA_VALIDATION_FAILED:Realm数组关联EmbeddedRealmObject验证失败求助

问题描述

我定义了几个简单的RealmObject类,代码如下:

class Patient : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId()
var firstName: String = ""
var lastName: String = ""
var visits: RealmList<PelletInsertionVisit> = realmListOf()
var lastFourOfSSN: String = ""
}

class PelletInsertionVisit : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId()
var visitDate = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC)
var pelletsUsed: RealmList<Pellet> = realmListOf()
}

class Pellet: EmbeddedRealmObject {
var size = PelletSize.ZERO.value
var lotNumber: String = "UNKNOWN"
}

执行以下代码时,调用Realm.open()抛出异常:

fun openPatientRealm() : Realm {
val configuration = RealmConfiguration.create(schema = setOf(Patient::class))
Logger.d("About to open Realm Configuration: $configuration")

try {
    val realm = Realm.open(configuration)  //EXCEPTION HERE

    Logger.d("Realm opened: : ${realm.toString()}")

    return realm
}
catch (ex: Exception) {
    Logger.e("Exception caught: " + ex.message)
    Logger.e("Stack trace: " + ex.stackTraceToString())
}

throw Exception("Realm Could Not be Opened")
}

异常信息:

[RLM_ERR_SCHEMA_VALIDATION_FAILED]: Schema validation failed due to the following errors:

  • Property 'PelletInsertionVisit.pelletsUsed' of type 'array' has unknown object type 'Pellet'

我按照文档使用EmbeddedRealmObject,但仍出现该问题,请问哪里操作错误?

解决方案

问题出在Realm配置的schema集合里——你只添加了Patient::class,但Realm无法自动递归识别嵌套的嵌入式对象Pellet。即便Pellet是EmbeddedRealmObject,当它被包含在RealmList中时,必须显式将其加入配置的schema中。

修改配置代码,把所有涉及到的Realm对象(包括嵌入式对象)都加入schema集合:

val configuration = RealmConfiguration.create(
    schema = setOf(Patient::class, PelletInsertionVisit::class, Pellet::class)
)

这样Realm就能识别到Pellet类型,解决schema验证失败的问题。

内容的提问来源于stack exchange,提问作者user443654

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:21:08