2016-05-21 3 views
1
私は、私は次のように設定されているサンプルグラフ持ちTinkerPop 2.6.0およびJava 8

Javaの

と一緒OrientDB 2.2.0を使用してい

使用グレムリンのパイプラインから頂点を入力するための手順: 市 - --LOCATED_IN --->国。

都市と国は両方ともcom.tinkerpop.frames.VertexFrameを実装しています。

私は、私は非常に簡単にこのように、たとえば、特定の国のために照会し、入力された反復処理可能を取り戻すことができFramedGraph作成する場合:これは完璧に動作

Iterable<Country> countries = framedGraph.getVertices("countryCode", "NL", Country.class); 

を。

今、私は同じタイプのものを実現したいと思っていましたが、Gremlinを使ってより複雑なクエリを行うことができました。簡単なテストのように、私はGremlinを使って前の声明で取り上げた国の都市を得ることができるかどうかを試してみたかったのです。私はしかし、達成したい何

Nijmegen 
Nieuw-Vennep 
Niewegein 
Sittard 
Sittard 
Noordwijk 
Lisse 

は、市がFramedGraphと同じように(代わりに頂点オブジェクトのパイプラインからオブジェクトを取り戻すことです。

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

は今、これは私が次のように出力を取り戻す、作品クエリ)。

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); 
} 

私は戻って取得::

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] 

だから私は戻って取得していた頂点の

は、私がこれに少しのコードを変更した場合ので、パイプラインは、正しい型を返すようですCityを入力します。 しかし、私はこれを行うにしようとした場合:

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); 
} 

を私が手:

java.lang.ClassCastException: com.tinkerpop.blueprints.impls.orient.OrientVertex cannot be cast to models.City 

また、私はこのしようとした場合:

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); 
} 

を私は同じクラスのキャスト例外を取得します。

私は明らかに何か間違っていますが、私は何を理解できません。どのポインタも大歓迎です!事前に

おかげで、[OK]をJonck

答えて

2

は、いくつかのより多く読んだ後、私は自分の質問への答えを見つけました。パイプラインから戻ってきた頂点を「フレーム化」する必要がありました。

Vertex nl = countries.iterator().next().asVertex(); 

GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<>(); 

pipe.start(nl).inE("LOCATED_IN").outV(); 

Iterable<City> cities = framedGraph.frameVertices(pipe, City.class); 

for (City city : cities) { 
    System.out.println(city.getName()); 
} 

をそして今、私は私が期待していた出力を取り戻す:

だから、次のように。これが誰かを助けることを望みます。

関連する問題