嵌入式neo4j中的节点引用相等是否得到保证?

时间:2014-02-12 16:39:01

标签: neo4j node-neo4j

我使用嵌入式图形数据库作为Java应用程序的一部分。假设我执行某种类型的密码查询,并返回包含节点集合的ExecutionResult。

可以假设这些节点形成连接图。

这些节点中的每一个都有一些关系,我可以使用node.getRelationships(Direction.OUTGOING)访问这些关系。我的问题是,如果其中一个关系的目标已经出现在执行结果中(即关系是查询模板的一部分),它是否保证Relationship.getEndPoint == Node X。

我想我真正要问的是,当Neo4j中的事务返回一个节点时,它只返回一个对象,不同的查询只会继续返回对该一个对象的引用,或者它是否继续生成新对象碰巧引用相同的数据点?由于Node没有覆盖equalsTo方法,我一直在假设前者,但我希望有人可以告诉我。

3 个答案:

答案 0 :(得分:5)

节点不是引用等号。您将只获得在不同操作中即时创建的NodeProxy对象。

但是equals() - 方法确实是id-equality,所以你应该使用它。

n1.equals(n2)

或者如果你保持节点id使用

n1.getId() == n2.getId()

答案 1 :(得分:0)

查看创建节点的时间neo4j在内部为其分配了一个node-id。您创建的所有关系都将引用起始节点ID和结束节点ID。

要检查,请执行此操作

首先通过调用方法node.getId()

创建一个节点并保存其节点ID

现在从另一个节点创建与它的关系。并致电您的relationship.getEndNode().getId()

您将看到node-id相同。

答案 2 :(得分:0)

这听起来像你的要求 - Neo'开箱即用'给出了数据库实体的并发控制,比如n-hibernate或实体框架对SQL的实现。 答案是不!你必须自己管理它。如果你做了删除它,可能会让你少量鲍勃