如何在Neo4j中使用枚举关系类型?

3

我想定义一些已分类节点之间的关系类型。当我查看示例时,它们总是使用字符串来定义关系类型,例如此示例中所示。通过使用:

@RelationshipEntity(type = "ACTED_IN")

我尝试使用org.neo4j.graphdb.RelationshipType,但RelationshipEntity.type需要一个字符串。

public enum PersonMovieRelationshipType implements RelationshipType {
    ACTED_IN("ACTED_IN"),
    AUTHOR("AUTHOR");

    private String type;

    PersonMovieRelationshipType( String type ){
        this.type = type;
    }

    public String getType() {
        return type;
    }
}

RelationshipType(关系类型)枚举提供了一个名为"name()"的方法,用于执行什么操作?

我不喜欢自由文本方式,是否可以使用枚举?

非常感谢提供完整的示例。

此致敬礼


2
不幸的是,枚举类型不能与对象实例一起使用。而且您还需要为您的类实现 .name() 方法。 - Michael Hunger
2
理论上枚举是可能的,但是在所有项目中只允许一个全局枚举就有点失去了意义。 - Michael Hunger
@MichaelHunger 这个评论还有效吗?根据 Luanne 在2016年7月的一篇文章,“只要您有一个我们可以识别的枚举,也就是说它与您的域包一起被扫描,我们将自动将枚举转换为字符串属性,存储在您的节点上,并在从图形中加载实体时将其转换回枚举。”(https://neo4j.com/blog/spring-data-neo4j-4-1-applications/) - Christoph Grimmer
1个回答

5
由于注解的工作方式,您无法这样做。您可以将关系名称声明为常量。
interface RelationNames{
  String ACTED_IN = "ACTED_IN";
}

然后在您的代码中使用这些常量

@RelationshipEntity(type = RelationNames.ACTED_IN)

1
我同意这个建议,但是如果它的唯一目的是保存常量,我建议使用一个带有私有默认构造函数的最终类。 - Samuel Kerrien
@SamuelKerrien 有效的编程技术,有些人认为它是一种反模式,但我并不完全相信 :) - Sleiman Jneidi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接