Гарантируется ли равенство ссылок на узлы во встроенном neo4j?

Я использую встроенную графическую базу данных как часть Java-приложения. Предположим, что я выполняю какой-то запрос на шифрование и возвращаю ExecutionResult, который содержит коллекцию узлов.

Можно предположить, что эти узлы образуют связный граф.

Каждый из этих узлов имеет некоторые отношения, к которым я могу получить доступ, используя node.getRelationships(Direction.OUTGOING). Мой вопрос: если цель одного из этих отношений уже присутствует в результате выполнения (т. Е. Отношение является частью шаблона запроса), гарантируется ли, что Relationship.getEndPoint == Node X.

Я полагаю, что на самом деле я спрашиваю, когда транзакция в Neo4j возвращает узел, возвращает ли он только один объект, а разные запросы будут просто возвращать ссылки на этот один объект, или он будет продолжать создавать новые объекты, которые происходят с ссылаетесь на одну и ту же точку данных? Так как Node не переопределяет метод equalsTo, я предполагал первый, но я надеялся, что кто-то может сказать мне.

3 ответа

Решение

Узлы не являются эталонными. Вы получите только объекты NodeProxy, которые создаются на лету в различных операциях.

Но equals()-method делает id-равенство, поэтому вы должны использовать это.

n1.equals(n2)

или если вы сохраняете идентификатор узла вокруг использования

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

Посмотрите, когда вы создаете узел, neo4j внутренне присваивает ему идентификатор узла. Все отношения, которые вы создадите, будут иметь ссылку на идентификатор начального узла и идентификатор конечного узла.

Для проверки сделайте это

Сначала создайте узел и сохраните его идентификатор, вызвав метод node.getId()

Теперь создайте отношение к нему из другого узла. И позвони relationship.getEndNode().getId(),

Вы увидите, что идентификаторы узлов одинаковы.

Это звучит так, как будто вы спрашиваете - предоставляет ли Neo "из коробки" контроль параллелизма сущностей базы данных, как это делает n-hibernate или Entity Framework для SQL. Ответ - нет! Вам придется управлять этим самостоятельно. Если вы удалите его, может сделать несколько бобов

Другие вопросы по тегам