【问题标题】:Upgrade of spring data neo4j 3.x to 4.x Relationship Operationsspring data neo4j 3.x 升级到 4.x 关系操作
【发布时间】:2015-10-08 12:23:46
【问题描述】:

在 Spring data neo4j 3.x 中创建两个节点之间的关系,并且关系包含一组属性,这些属性之前由 apis 用来实现这一点

create :
  n4jOperations.createRelationshipBetween(Object start, Object end, Class<R> relationshipEntityClass, String relationshipType, boolean allowDuplicates);

delete:
n4jOperations.deleteRelationshipBetween(Object start, Object end, String type);

get:
n4jOperations.getRelationshipBetween( from, to, relationshipClass, relationshipType );

但迁移后我没有找到上面的api

按照文档说

@NodeEntity
public class Student {
    private String name;

    @Relationship(type = "ENROLLED")
    private Set<Enrollment> enrollments;    
}

By repo.save(Student); 

//关系创建是可能的,但新的api如何实现以下用例

1.如何避免重复创建关系?

2.获取两个节点之间的关系?

2.删除两个节点之间的关系?

【问题讨论】:

    标签: spring neo4j spring-data-neo4j spring-data-neo4j-4 neo4j-ogm


    【解决方案1】:

    SDN 4 不提供像直接设置节点和关系这样的低级图形操作。

    图表中的关系是使用您的域类中的 object references 建模和操作的。它们有两种风格:隐式和显式。隐式关系通过两个节点实体之间的简单引用来描述,例如客户和地址:

    class Customer {
       @Relationship(type="LIVES_AT")
       Address address; // implied (:Customer)-[:LIVES_AT]->(:Address)
       ...   
    }
    

    显式关系 使用RelationshipEntity 对象建模,并且允许具有属性(但不是必须)。它们仍然在您的域模型中作为引用进行访问。

    class Person {
       @Relationship(type="RATED")
       List<Rating> ratings
    }
    
    class Movie {
    }
    
    @RelationshipEntity(type="RATED")
    class Rating {
        @StartNode Person person;
        @EndNode Movie movie;
    
        int stars;
    }
    

    注意:如果您不需要特定关系的属性,则不需要使用RelationshipEntity。

    回答您的具体问题:

    1) SDN 4.0 不会创建重复的关系。无论您将特定对象引用保留多少次,它都将仅由图中的一个关系表示。

    2) 希望现在清楚了!

    3) 将对象引用设置为 null 并保存父对象将删除关系。或者,如果引用是 Collection 的一部分,则将其从集合中删除。您必须确保从两侧删除对象引用。例如,如果 A 持有对 B 的引用,而 B 持有对 A 的引用,则必须删除 A 对 B 的引用以及 B 对 A 的引用。

    【讨论】:

    猜你喜欢
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多