尝试通过Graph API通过OrientDB获取ORecordBytes时出现ClassCastException

时间:2014-07-31 20:48:11

标签: java orientdb

我尝试使用OrientDB来存储图像/字节数据,并遵循本教程:Store it with ORecordBytes(我选择"使用ORecordBytes存储它"方法")。

使用以下代码存储数据似乎不会造成任何麻烦:

   Vertex vertex = db.addVertex("class:items");
   ...
   ORecordBytes imageRecord = new ORecordBytes(stream.toByteArray());
   imageRecord.save();
   vertex.setProperty("image", imageRecord);
   ...
   db.commit();

但是,当我尝试检索这样的数据时:

    ORecordBytes imageRecord = vertex.getProperty("image");

...我在上面的行中得到了这个:

Exception in thread "main" java.lang.ClassCastException: com.orientechnologies.orient.core.record.impl.ORecordBytes cannot be cast to com.orientechnologies.orient.core.record.impl.ODocument
at com.tinkerpop.blueprints.impls.orient.OrientBaseGraph.getElement(OrientBaseGraph.java:1145)
at com.tinkerpop.blueprints.impls.orient.OrientElement.getProperty(OrientElement.java:186)
at service.database.DAO.OrientDBGraphAPIItemDAO.vertexToItem(OrientDBGraphAPIItemDAO.java:154)
at service.database.DAO.OrientDBGraphAPIItemDAO.create(OrientDBGraphAPIItemDAO.java:68)
at testing.TestApplication.main(TestApplication.java:69)

我真的没有看到我正在向ODocument演员,但我不知道OrientDB的内部。由于本教程是为Document API编写的,我想知道这是否可能是原因?或者我只是错过了其他的东西?

2 个答案:

答案 0 :(得分:3)

您可以遵循Luigi的建议,但这已在1.7.8版本中修复:

https://github.com/orientechnologies/orientdb/issues/2643

答案 1 :(得分:2)

您的代码中没有进行强制转换,但是在OrientBaseGraph类中,这是一个OrientDB内部类。

您应该使用以下语法解决此问题:

vertex.getRecord().field("image");

无论如何,我认为它可以被视为一个问题,所以我建议你在OrientDB问题跟踪器中报告。