Ich verwende Orientdb 2.2.0 zusammen mit TinkerPop 2.6.0 und Java 8.Wie getippt erhalten Vertex von Gremlin Pipeline mit Hilfe von Java
Ich habe eine Probe Diagramm, das eingerichtet ist, wie folgt: City - --LOCATED_IN ---> Land.
Sowohl Stadt als auch Land implementieren com.tinkerpop.frames.VertexFrame.
Wenn ich eine FramedGraph ich sehr leicht für ein bestimmtes Land abfragen kann und eine typisierte Iterable zurück, zum Beispiel wie folgt aus:
Iterable<Country> countries = framedGraph.getVertices("countryCode", "NL", Country.class);
Dieses perfekt funktioniert.
Jetzt wollte ich die gleiche Art von Sache erreichen, aber dann mit Gremlin, damit ich kompliziertere Abfragen machen kann. Also als einen einfachen Test wollte ich testen und sehen, ob ich die Städte des Landes, die ich mit der vorherigen Aussage holte, mit Gremlin holen konnte.
Vertex nl = countries.iterator().next().asVertex();
GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<>();
pipe.start(nl).inE("LOCATED_IN").outV();
for (Vertex v : pipe) {
System.out.println(v.getProperty("name").toString());
}
Jetzt funktioniert dies, ich die folgende Ausgabe zurück:
Nijmegen
Nieuw-Vennep
Niewegein
Sittard
Sittard
Noordwijk
Lisse
Was ich aber erreichen möchte ist Stadt statt Vertex Objekte Objekte aus der Pipeline, um wieder (wie bei der FramedGraph Abfrage).
Es scheint, die Pipeline die richtigen Typen zurückkehrt, denn wenn ich den Code leicht auf das zu ändern:
Vertex nl = countries.iterator().next().asVertex();
GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<>();
pipe.start(nl).inE("LOCATED_IN").outV();
for (Vertex v : pipe) {
System.out.println(v);
}
ich zurück
:v(City)[#38:3]
v(City)[#40:3]
v(City)[#37:3]
v(City)[#36:3]
v(City)[#33:4]
v(City)[#35:3]
v(City)[#39:3]
So Eckpunkten Ich bin immer wieder von Geben Sie Stadt ein. Aber wenn ich versuche, dies zu tun:
Vertex nl = countries.iterator().next().asVertex();
GremlinPipeline<Vertex, City> pipe = new GremlinPipeline<>();
pipe.start(nl).inE("LOCATED_IN").outV();
for (City v : pipe) {
System.out.println(v);
}
ich:
java.lang.ClassCastException: com.tinkerpop.blueprints.impls.orient.OrientVertex cannot be cast to models.City
Auch wenn ich dies versuchen:
Vertex nl = countries.iterator().next().asVertex();
GremlinPipeline<Vertex, City> pipe = new GremlinPipeline<>();
pipe.start(nl).inE("LOCATED_IN").outV().cast(City.class);
for (City v : pipe) {
System.out.println(v);
}
ich die gleiche Klasse Guss Ausnahme erhalten.
Ich mache offensichtlich etwas falsch, aber ich kann nicht herausfinden, was. Alle Hinweise wären sehr willkommen!
Vielen Dank im Voraus, Jonck