我意识到有一个类似的问题被问到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标签?
答案 0 :(得分:4)
当您的层次结构具有多于1个(非抽象)类时,带有_前缀的标签允许SDN正确地确定类型。
E.g。当你有类似的层次结构
Person
Patient extends Person
EbolaPatient extends Patient
然后让我们说你保存了类Patient的实例然后节点将有_Patient标签,当你保存EbolaPatient实例时它会有_EbolaPatient标签。
如果您随后检索节点(例如,在人员存储库中使用findAll作为集合),SDN将正确地将实体实例化为Patient和EbolaPatient。
如何实现这一点的其他选择是找到一个最符合类层次结构的标签,这比带有额外的前缀标签要复杂得多。
要查看详细信息,请参阅SDN项目中的LabelBasedNodeTypeRepresentationStrategy类。