通过 gremlin 服务器公开的 Titan 图形的 ORM

ORM for Titan graph exposed through gremlin server

我有一个泰坦服务器运行配置如下

  1. 以 Cassandra 作为存储后端的 Titan Graph
  2. 带有 WebSocketChannelizer 的 Gremlin 服务器
  3. 泰坦版本:titan-1.0.0-hadoop1

我有一个 Java 带有 Gremlin Driver 3.0.1-incubating 的应用程序,它可以打开客户端连接到远程 gremlin 服务器。

我能够提交 gremlin 查询以创建顶点并通过 g.V() 等查询返回结果。

CompletableFuture<ResultSet> submitAsync = client.submitAsync("g.V()");
List<Result> list = submitAsync.get().all().get();

现在我想将这些列表转换成List<Person>

是否有可用于 gremlin driver/gremlin 服务器的对象映射器?

据我所知,没有这样的映射器。关注此问题:

https://issues.apache.org/jira/browse/TINKERPOP3-575

完成后,现有的 ORM 将在 Gremlin 服务器上运行。现在,您必须自己将 Vertex 转换为 "person"。不过,通常情况下,模式不一定是 return 原始顶点,而是 return 将这些顶点转换为 Map 构造,您可以在客户端上更通用地使用该构造。

是的,有。请查看 Github 上的 Peapod library。您可以使用它来创建自己的 类 来映射所有顶点和边。 Peapod使用代码生成实现框定的顶点和边类.

例如,

@Vertex
public abstract class Person {
  public abstract String getName();
  public abstract void setName(String name);

  public abstract List<Knows> getKnows();
  public abstract Knows getKnows(Person person);
  public abstract Knows addKnows(Person person);
  public abstract Knows removeKnows(Person person);
}

@Edge
public abstract class Knows {
  public abstract void setYears(int years);
  public abstract int getYears();
}

然后,你可以这样使用它:

public void testClassic() {
    Graph g = TinkerFactory.createClassic();
    FramedGraph graph = new FramedGraph(g, Person.class.getPackage());

    Person marko = graph.v(1, Person.class);
    assertEquals("marko", marko.getName());

    Person vadas = graph.v(2, Person.class);
    Person josh = graph.v(4, Person.class);

    List<Person> result = graph.V(Person.class).has("name", "josh").toList();
    assertThat(result, contains(josh));

    assertThat(marko.getKnows(), containsInAnyOrder(vadas, josh));
}

尽情享受吧。

顺便说一下,看看 here 其他有用的 Tinkerpop 很棒的非官方库。

免责声明:我是 Peapod 的贡献者和 awesome-tinkerpop 库的所有者。