【发布时间】:2014-03-26 05:59:58
【问题描述】:
从 Scala 访问 OrientDB 1.7-RC1,当尝试使用自定义类型对象的 embeddedset 保存 ODocument 时,我收到一个异常,指出相应字段的类型不兼容。我需要帮助找出我做错了什么。
创建/保存 ODocument 的代码如下所示,它表示一个包,其中包含一组嵌入的 Dependency 对象:
val myHashSet = new util.HashSet[models.Dependency]()
myHashSet.add(new models.Dependency("mydep", "1.0"))
val myVersion = new ODocument("Version")
.field("id", "myversion")
.field("dependencies", myHashSet)
myVersion.save()
这导致抛出以下异常:
com.orientechnologies.orient.core.exception.OValidationException: The field 'Version.dependencies' has been declared as EMBEDDEDSET but an incompatible type is used. Value: Dependency(mydep,1.0)
at com.orientechnologies.orient.core.record.ORecordSchemaAwareAbstract.validateEmbedded(ORecordSchemaAwareAbstract.java:429) ~[orientdb-core-1.7-rc1.jar:1.7-rc1]
at com.orientechnologies.orient.core.record.ORecordSchemaAwareAbstract.validateField(ORecordSchemaAwareAbstract.java:249) ~[orientdb-core-1.7-rc1.jar:1.7-rc1]
at com.orientechnologies.orient.core.record.ORecordSchemaAwareAbstract.validate(ORecordSchemaAwareAbstract.java:71) ~[orientdb-core-1.7-rc1.jar:1.7-rc1]
at com.orientechnologies.orient.core.record.impl.ODocument.save(ODocument.java:1357) ~[orientdb-core-1.7-rc1.jar:1.7-rc1]
at com.orientechnologies.orient.core.record.impl.ODocument.save(ODocument.java:1347) ~[orientdb-core-1.7-rc1.jar:1.7-rc1]
at com.orientechnologies.orient.core.record.impl.ODocument.save(ODocument.java:1336) ~[orientdb-core-1.7-rc1.jar:1.7-rc1]
我已经在数据库的架构中声明了 Version.dependencies 嵌入集,如下所示:
create property Version.dependencies embeddedset Dependency
Dependency 类定义如下所示(它实现了 OSerializableStream,因为这对于序列化嵌入式对象来说是必需的):
case class Dependency(var id: String, var specifier: String) extends OSerializableStream {
def this() = this(null, null)
override def toStream: Array[Byte] = {
val bytes: Array[Byte] = Json.prettyPrint(Json.toJson(this)).getBytes
bytes
}
override def fromStream(iStream: Array[Byte]): OSerializableStream = {
val json = Json.parse(iStream)
val dependency = Json.fromJson[Dependency](json).get
dependency
}
}
object Dependency {
implicit val versionFormat = Json.format[Dependency]
}
我在这里做错了什么?
【问题讨论】: