为什么Spring Data Neo4j在节点上创建下划线前缀标签?

时间:2015-02-25 20:11:05

标签: java neo4j spring-data-neo4j

我意识到有一个类似的问题被问到here,但我试图理解SDN方法背后的原因,即创建一个与我的类名匹配的标签,同时创建一个以下划线为前缀的相同标签

因此,例如,我有一个Patient类。当我通过我的Neo4j存储库创建我的@NodeEntity装饰Patient类,然后通过Neo4j Web控制台查询它时,我看到Patient和_Patient作为标签。

作为这个问题的扩展,我说我有以下表示节点的类的继承层次结构:

@NodeEntity
public class Patient extends Person {
   //class definition here
}

@NodeEntity
public abstract class Person {
    //class definition here
}

当我将Patient的实例保存到数据库时,它将有三个标签:Person,Patient,_Patient。为什么我的节点也没有_Patient标签?

1 个答案:

答案 0 :(得分:4)

当您的层次结构具有多于1个(非抽象)类时,带有_前缀的标签允许SDN正确地确定类型。

E.g。当你有类似的层次结构

Person
Patient extends Person
EbolaPatient extends Patient

然后让我们说你保存了类Patient的实例然后节点将有_Patient标签,当你保存EbolaPatient实例时它会有_EbolaPatient标签。

如果您随后检索节点(例如,在人员存储库中使用findAll作为集合),SDN将正确地将实体实例化为Patient和EbolaPatient。

如何实现这一点的其他选择是找到一个最符合类层次结构的标签,这比带有额外的前缀标签要复杂得多。

要查看详细信息,请参阅SDN项目中的LabelBasedNodeTypeRepresentationStrategy类。