在我的项目中,我通过GraphDatabaseService
使用Neo4j的Core-API。在测试中,我们有EmbeddedGraphDatabase
,其中一切都按预期工作。然后我编写了一些测试来查看我的实现在RestGraphDatabase
上的行为,只是为了找出它大部分都失败了!
(GraphDatabaseService由Rest-API的GraphDatabaseFactory获取,因此没有instanceof
检查我不知道它是哪一个)
一些例子:
如果我使用GlobalGraphOperations
,一切都会失败,因为RestGraphDatabase
不支持GlopalGraphOperations。 (奇怪的是,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
初始化的。这里的问题是,方法不可互换,不实现相同的接口,返回类型完全不同(即ExecutionResult
vs QueryResult
)
所以我的问题是:有没有办法,从Neo4j获得相同的行为,其中使用的技术(Rest vs. Embedded)无关紧要?某种技术独立的Wrapper将满足我的需求。
顺便说一下,我在版本2中使用Neo4j答案 0 :(得分:1)
就是不要这样做。它会做什么(如果它工作)将通过线路执行对数据库的每次调用,读取和写入节点,rels和属性。你不想那样做。
改为使用它。
queryEngine = new RestCypherQueryEngine(restGraphDb.getRestAPI());
queryEngine.query(query, params)
这会将查询发送到服务器并在那里运行。