gpt4 book ai didi

java - Neo4j - 如何处理不兼容的 RestGraphDatabase 调用

转载 作者:行者123 更新时间:2023-12-01 13:16:47 25 4
gpt4 key购买 nike

在我的项目中,我通过 GraphDatabaseService 使用 Neo4j 的 Core-API。在测试中,我们有一个 EmbeddedGraphDatabase,其中一切都按预期工作。然后,我编写了一些测试来查看我的实现在 RestGraphDatabase 上的行为如何,只是为了发现其中大部分都失败了!(GraphDatabaseService是通过Rest-API的GraphDatabaseFactory获取的,所以如果没有instanceof检查我不知道它是哪一个)一些例子:

如果我使用GlobalGraphOperations,一切都会失败,因为RestGraphDatabase不支持GlobalGraphOperations。 (奇怪的是,GlobalGraphOperations.at 不会抛出,而是抛出 GlobalGraphOperations 中的所有方法)。

然后我想“好吧,我会使用 Cypher 来获得相同的行为。”我尝试实现这样的方法:

public getNodesWithLabel(String label, GraphDatabaseService graphService){
try(Transaction tx graphService.beginTx()){
ExecutionEngine ee = new ExecutionEngine(graphService);
//throws NullPOinterExeption in execute method
ExecutionResult result = ee.execute("MATCH (n:" + label + ") RETURN n");
result.columnAs("n");
//... mapping of Nodes
}
}

通过 API 搜索,我看到有一个 RestCypherQueryEngine,它是通过 RestAPIFascade 初始化的。这里的问题是,这些方法不可互换,不实现相同的接口(interface),并且返回类型完全不同(即 ExecutionResultQueryResult)

所以我的问题是:有没有一种方法可以从 Neo4j 获得相同的行为,而所使用的技术(Rest 与 Embedded)并不重要?某种独立于技术的包装器将满足我的需求。

顺便说一句,我在版本 2 中使用 Neo4j

最佳答案

只是不要这样做。它要做的(如果它有效的话)是通过线路执行对数据库的每次调用,对节点、关系和属性的读写。你不想那样做。

用这个代替。

queryEngine = new RestCypherQueryEngine(restGraphDb.getRestAPI());
queryEngine.query(query, params)

这会将查询发送到服务器并在那里运行它们。

关于java - Neo4j - 如何处理不兼容的 RestGraphDatabase 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22410660/

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