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
相关产品推荐
相关产品推荐

