Гарантируется ли равенство ссылок на узлы во встроенном 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. Ответ - нет! Вам придется управлять этим самостоятельно. Если вы удалите его, может сделать несколько бобов