通过 gremlin 服务器公开的 Titan 图形的 ORM
ORM for Titan graph exposed through gremlin server
我有一个泰坦服务器运行配置如下
- 以 Cassandra 作为存储后端的 Titan Graph
- 带有 WebSocketChannelizer 的 Gremlin 服务器
- 泰坦版本: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
库的所有者。
我有一个泰坦服务器运行配置如下
- 以 Cassandra 作为存储后端的 Titan Graph
- 带有 WebSocketChannelizer 的 Gremlin 服务器
- 泰坦版本: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
库的所有者。