After declaring the embeddedset property explicitly in the database schema
('create property Version.dependencies embeddedset Dependency'), it looks
like it goes wrong already at creation. I now get this exception when
saving the ODocument:

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]


The creation code that causes this exception looks as follows:

    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()

The Dependency class looks like this (with a companion object for JSON
formatting):

    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]
    }


What am I doing wrong?? See also my
SO<http://stackoverflow.com/questions/22597119/why-cant-i-save-this-odocument-with-embeddedset-property-to-orientdb>question
on this issue.

Thanks,
Arve


On Sat, Mar 22, 2014 at 11:49 PM, Arve Knudsen <[email protected]>wrote:

> Hi guys
>
> With OrientDB 1.7-rc1, I can't for the life of me figure out how to load
> an 
> embeddedset<https://github.com/orientechnologies/orientdb/wiki/Concepts#1-n-and-n-m-embedded-relationships>from
>  an ODocument in Scala, even though I think i have stored the set
> correctly. I stored objects implementing OSerializableStream in a HashSet
> with the ODocument, and it looks alright when doing SQL selects on the
> embeddedset. However, when I load the set back from the ODocument, it's
> represented as a collection of strings, i.e. there's no deserialization.
>
> What I've tried is basically this, given that version is an ODocument and
> the type contained in the embeddedset ("dependencies") is Dependency:
>
>     val deps =
> version.field[OTrackedList[Dependency]]("dependencies").asScala.toSeq
>     val dep: Dependency = deps.head
>
> The final statement throws this exception: *[ClassCastException:
> java.lang.String cannot be cast to models.Dependency]*. How can I read
> the "dependencies" field properly deserialized to a Set[Dependency]??
> Please help!
>
> Thanks,
> Arve
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to