使用Spring-Data在Neo4J中创建关系

时间:2015-11-01 12:02:09

标签: neo4j spring-data-neo4j-4

我想在neo4j中创建一个关系,其中Person有一个朋友列表。我可以使用spring-data以两种方式执行此操作。

a)创建一个具有List的类Person,重复发送朋友,并使用@Relationship注释相同的内容。

@NodeEntity(label="Person")
public class Person {

    @GraphId
    private Long id;
    private String firstName;
    private String lastName;
    private String email;
    @Relationship(type = "FRIEND_WITH")
    List<Person> friends; 
}

b)创建没有任何List的Person对象,并与Cypher建立“FRIEND_WITH”关系

@Query "CREATE (a)-[FRIEND_WITH]->(b)"

这两种方法的优点/缺点是什么?

2 个答案:

答案 0 :(得分:2)

只要有可能,您应该使用代码管理域模型中的实体和关系,而不是查询。在代码中执行此操作的优点是您的域对象和图形将保持同步。 SDN使用的基础对象图形映射器无法理解您的查询正在执行的操作,因此无法对您的域模型进行任何更改。这意味着每次使用查询改变数据库时,您可能需要重新加载所有对象。

答案 1 :(得分:1)

我正在添加第二个答案,因为我无法在评论中格式化代码,但是这样的东西可以开箱即用,并且不需要任何查询。

public class Person {

    private Long id;
    private String name;

    @Relationship(type="FOLLOWS", direction = "OUTGOING")
    private Set<Person> followees = new HashSet<>();

    @Relationship(type="FOLLOWS", direction = "INCOMING")
    private Set<Person> followers = new HashSet<>();

    public void follow(Person p) {
        this.followees.add(p);
        p.followers.add(this);
    }

    public void unfollow(Person p) {
        this.followees.remove(p);
        p.followers.remove(this);
    }
}