我正在使用Tinkerpop Frames
来创建一组顶点和边。添加新顶点很简单,但基于类型的后退顶点似乎有点困难。
假设我有一个课程A
和B
,我想添加一个新课程:
framedGraph.addVertex(null, A.class);
framedGraph.addVertex(null, B.class);
这是直截了当的。但是如果我想要检索类型为A
的所有顶点呢?
执行此操作失败,因为它返回了所有顶点(A
和B
)。
framedGraph.query().vertices(A.class);
有没有办法做到这一点。我试图检查文件和测试用例没有运气。如何仅检索A
类型的顶点列表
答案 0 :(得分:0)
这个问题看起来像是How to Find Vertices of Specific class with Tinkerpop Frames的重复(今天也会被问到)。
据我所知,Tinkerpop Frame框架充当顶点周围的包装类。顶点实际上并不存储为接口类。因此,我们需要一种方法来将顶点标识为特定type
。
我的解决方案,我在框架类中添加了@TypeField
和@TypeValue
注释。然后我使用这些值来查询FramedGraph
。
可以在此处找到这些注释的文档:https://github.com/tinkerpop/frames/wiki/Typed-Graph
@TypeField("type")
@TypeValue("person")
interface Person extends VertexFrame { /* ... */ }
然后通过添加FramedGraphFactory
来定义TypedGraphModuleBuilder
。
static final FramedGraphFactory FACTORY = new FramedGraphFactory(
new TypedGraphModuleBuilder()
.withClass(Person.class)
//add any more classes that use the above annotations.
.build()
);
然后检索Person
Iterable<Person> people = framedGraph.getVertices('type', 'person', Person.class);
我不确定这是最有效/简洁的解决方案(我想看看@stephen mallette的建议)。目前还没有,但能够做到这样的事情是合乎逻辑的:
// framedGraph.getVertices(Person.class)