Neo4J Cypher - ограничить только одно отношение для узла

Я новичок в Neo4J и пытаюсь создать приложение для социальной сети, используя запросы Cypher в качестве аннотированных запросов в Spring Neo4J.

Как я могу ограничить пользовательский узел только одной связью с адресным узлом, используя команду / запрос cypher или любую конфигурацию? По сути, я не хочу, чтобы у пользователя было несколько адресных отношений.


person ayan_2587    schedule 28.12.2013    source источник
comment
Со стороны neo4j это пока нельзя сделать, хотя я думаю, что со стороны SpringDataNeo4j можно. Посмотрим, что скажут парни из Spring.   -  person Eve Freeman    schedule 28.12.2013
comment
Можно ли каким-либо образом использовать оператор Create Unique в этом случае?   -  person ayan_2587    schedule 28.12.2013


Ответы (2)


Это можно сделать с помощью TransactionEventHandler. TransactionEventHandler - это компонент, написанный на Java и зарегистрированный в вашем экземпляре graphDatabaseService. В этом beforeCommit вы можете наложить вето на транзакцию.

Имейте в виду, что написание и использование TransactionEventHandler - это продвинутая концепция в Neo4j.

person Stefan Armbruster    schedule 28.12.2013

Вы можете смоделировать свою сущность User следующим образом:

@NodeEntity 
public class User {

@GraphId Long id;

@Indexed String name;

@RelatedTo(type="ADDRESS")
Address address;

}

Затем SDN обеспечит наличие только одного ADDRESS отношения от User к Address.

person Michael Hunger    schedule 02.01.2014
comment
Круто .. Но в случае, если я попытаюсь создать новый адрес отношения, будут ли новые отношения отменять предыдущий адрес? - person ayan_2587; 04.01.2014
comment
Я пробовал то же самое, но и для меня он создает новые отношения вместо удаления первого и последующего создания, он сохраняет оба отношения в БД. - person vkrishna17; 30.01.2019