我尝试使用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编写的,我想知道这是否可能是原因?或者我只是错过了其他的东西?
答案 0 :(得分:3)
您可以遵循Luigi的建议,但这已在1.7.8版本中修复:
答案 1 :(得分:2)
您的代码中没有进行强制转换,但是在OrientBaseGraph类中,这是一个OrientDB内部类。
您应该使用以下语法解决此问题:
vertex.getRecord().field("image");
无论如何,我认为它可以被视为一个问题,所以我建议你在OrientDB问题跟踪器中报告。