2

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

我正在使用类似的东西在实体中创建一组关系实体对象

@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?

4

1 回答 1

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

参考文档

笔记

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

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

  • 我是对的吗?如果是的话,这个问题是否存在?我是否需要转储 Spring Data Neo4j 并转而使用 Core API?

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

于 2013-08-29T18:27:49.537 回答