2

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

可以假设这些节点形成一个连通图。

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

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

4

3 回答 3

5

节点不等于引用。您只会获得在不同操作中动态创建的 NodeProxy 对象。

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

n1.equals(n2)

或者如果您将节点 ID 保留在周围使用

n1.getId() == n2.getId()
于 2014-02-16T12:52:18.700 回答
0

当你创建一个节点时,neo4j 会在内部为其分配一个节点 ID。您创建的所有关系都将引用起始节点 ID 和结束节点 ID。

为了检查这样做

首先创建一个节点并通过调用方法保存它的节点idnode.getId()

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

您将看到节点 ID 相同。

于 2014-02-13T07:51:40.803 回答
0

这听起来像您的要求 - Neo 是否“开箱即用”提供数据库实体的并发控制,就像 n-hibernate 或实体框架对 SQL 所做的那样。答案是不!您将不得不自己管理它。如果你确实这样做了,可能会让你变得更糟

于 2014-02-13T08:56:38.367 回答