Spring Data Neo4j中的DynamicRelationshipType或在运行时定义关系类型

时间:2013-08-29 17:07:24

标签: java neo4j spring-data-neo4j

我可以在运行时指定关系类型吗?

我正在使用类似

之类的东西在Entity中创建一组relationshipEntity对象
@Fetch
@RelatedToVia(type="RELATED_IN_SOME_WAY", direction = Direction.BOTH)
Set<ThingRelationship> relationships = new HashSet<ThingRelationship>();

ThingRelationship是

@RelationshipEntity
public class ThingRelationship {

public ThingRelationship() {
    super();
}

//incremental neo4j set ID
@GraphId Long nodeId;

//Start and end nodes
@StartNode Thing startThing;
@EndNode Thing endThing;

//Relationship Type
@org.springframework.data.neo4j.annotation.RelationshipType
String relationship;

但是我不想在编译时指定关系类型( type =“RELATED_IN_SOME_WAY”),而是在运行时指定。当我删除type =“RELATED_IN_SOME_WAY时,我收到一个必须定义默认类型的错误

在Neo4j这样的运行时关系类型我认为需要使用 DynamicRelationshipType 但是我不认为Spring Data Neo4j支持这个概念。

我是否正确,如果是这样,那么这个问题呢?我是否需要转储Spring Data Neo4j并转而使用Core API?

1 个答案:

答案 0 :(得分:5)

  • 在Neo4j这样的运行时关系类型我认为需要使用DynamicRelationshipType但是我不认为Spring Data Neo4j支持这个概念。

来自reference documentation

  

请注意

     

因为动态类型信息通常是动态的   无法使用SDN向后读取映射。关系   仍然存在,但SDN无法帮助您访问它,因为它没有   知道你给它的类型。此外,出于这个原因,我们要求你   指定默认关系类型,以便我们至少可以尝试   反向映射。

因此,虽然仍然创建了动态关系,但它无法使用该信息从Neo4j数据库中检索返回的节点/关系。默认关系是必需的,因此SDN至少可以返回已知关系。

  • 我是否正确,如果是这样,那么这个问题呢?我是否需要转储Spring Data Neo4j并转而使用Core API?

您可以使用SDN使用@RelationshipType创建所需的所有动态关系,但无法使用默认API将其恢复。您可以使用编写自己的Cypher或编写遍历代码,并使用@Query将其附加到存储库或节点属性。