gpt4 book ai didi

Tinkerpop Frames 写入数据库 - 新手

转载 作者:行者123 更新时间:2023-12-02 03:35:19 26 4
gpt4 key购买 nike

我第一次使用 Frames,但我的 Java 已经很生疏了。我坚持通过框架将信息写入数据库。我一直在关注文档并拥有一个 Person 界面。

public interface Person {
@Property("name")
public String getName();

@Adjacency(label="knows")
public Iterable<Person> getKnowsPeople();

@Adjacency(label="knows")
public void addKnowsPerson(final Person person);

@GremlinGroovy("it.out('knows').out('knows').dedup") //Make sure you use the GremlinGroovy module! #1
public Iterable<Person> getFriendsOfAFriend()
}

取自文档。我可以使用这个简单的代码从图中获取数据。

TinkerGraph graph = TinkerGraphFactory.createTinkerGraph(); //This graph is pre-populated.
FramedGraphFactory factory = new FramedGraphFactory(new GremlinGroovyModule()); //(1) Factories should be reused for performance and memory conservation.

FramedGraph framedGraph = factory.create(graph); //Frame the graph.

Person person = framedGraph.getVertex(1, Person.class);
person.getName(); // equals "marko"

我想知道的是如何创建一个新的 Person 对象并将其写入图表。因为 Person 只是一个接口(interface),所以我不能这样做:

Person person2 = new Person();
person2.setName("John");
person2.setAge(36);
framedGraph.addVertex(person2);

所以我尝试了一个实现 Person 的 PersonImpl 类并添加了以下代码

PersonImpl johnBoy = new PersonImpl();
johnBoy.setName("John");
johnBoy.setAge(36);
johnBoy.addKnowsPerson(person);
person.addKnowsPerson(johnBoy);

但是我得到了以下 NullPointer,我现在真的卡住了。我希望有人能够帮助我。

Exception in thread "main" java.lang.NullPointerException
at com.tinkerpop.blueprints.impls.tg.TinkerGraph.addEdge(TinkerGraph.java:331)
at com.tinkerpop.frames.FramedGraph.addEdge(FramedGraph.java:310)
at com.tinkerpop.frames.annotations.AdjacencyAnnotationHandler.addEdges(AdjacencyAnnotationHandler.java:87)
at com.tinkerpop.frames.annotations.AdjacencyAnnotationHandler.processVertex(AdjacencyAnnotationHandler.java:53)
at com.tinkerpop.frames.annotations.AdjacencyAnnotationHandler.processElement(AdjacencyAnnotationHandler.java:26)
at com.tinkerpop.frames.annotations.AdjacencyAnnotationHandler.processElement(AdjacencyAnnotationHandler.java:15)
at com.tinkerpop.frames.FramedElement.invoke(FramedElement.java:89)
at com.sun.proxy.$Proxy4.addKnowsPerson(Unknown Source)
at com.elecrticdataland.utility.TinkerTest.main(TinkerTest.java:45)

非常感谢,

约翰

最佳答案

你不能创建一个 Person 除非通过代理。换句话说,您不能使用该接口(interface)的具体实现,它必须由 FramesGraph 动态构建。

这里有创建Person的代码:

FramedGraph framedGraph = factory.create(graph); //Frame the graph.

Person person = framedGraph.getVertex(1, Person.class);
person.getName(); // equals "marko"

否则,创建的 Person 实现将不知道任何关于提供给 factory.create() 的底层和注入(inject)的 Graph 实例/p>

关于Tinkerpop Frames 写入数据库 - 新手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23848565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com