为什么 Spring Data Neo4j 在节点上创建下划线前缀标签?
Why does Spring Data Neo4j create an underscore prefixed label on nodes?
我意识到有人提出了类似的问题 here,但我试图理解 SDN 方法背后的原因,即创建与我的 class 名称相匹配的标签,并创建下划线作为前缀的相同标签。
所以,例如,我有一个病人 class。当我通过我的 Neo4j 存储库创建我的 @NodeEntity 装饰 Patient class,然后通过 Neo4j Web 控制台查询它时,我看到 Patient 和 _Patient 作为标签。
作为这个问题的扩展,假设我有以下代表节点的 classes 继承层次结构:
@NodeEntity
public class Patient extends Person {
//class definition here
}
@NodeEntity
public abstract class Person {
//class definition here
}
当我将一个Patient实例保存到数据库时,它会有三个标签:Person、Patient、_Patient。为什么我的节点没有 _Patient 标签?
当您的层次结构超过 1 个(不是抽象的)时 classes 以 _ 为前缀的标签允许 SDN 正确确定类型。
例如当你相似的等级
Person
Patient extends Person
EbolaPatient extends Patient
那么假设您保存了 class 患者的实例,那么该节点将具有 _Patient 标签,当您保存 EbolaPatient 实例时,它将具有 _EbolaPatient 标签。
如果您随后检索节点(例如,在个人存储库上使用 findAll 作为集合),SDN 将正确地将实体实例化为 Patient 和 EbolaPatient。
如何实现这一点的其他选择是找到位于 class 层次结构最下方的标签,这比使用额外的前缀标签要复杂得多。
要查看详细信息,请参阅 SDN 项目中的 LabelBasedNodeTypeRepresentationStrategy class。
我意识到有人提出了类似的问题 here,但我试图理解 SDN 方法背后的原因,即创建与我的 class 名称相匹配的标签,并创建下划线作为前缀的相同标签。
所以,例如,我有一个病人 class。当我通过我的 Neo4j 存储库创建我的 @NodeEntity 装饰 Patient class,然后通过 Neo4j Web 控制台查询它时,我看到 Patient 和 _Patient 作为标签。
作为这个问题的扩展,假设我有以下代表节点的 classes 继承层次结构:
@NodeEntity
public class Patient extends Person {
//class definition here
}
@NodeEntity
public abstract class Person {
//class definition here
}
当我将一个Patient实例保存到数据库时,它会有三个标签:Person、Patient、_Patient。为什么我的节点没有 _Patient 标签?
当您的层次结构超过 1 个(不是抽象的)时 classes 以 _ 为前缀的标签允许 SDN 正确确定类型。
例如当你相似的等级
Person
Patient extends Person
EbolaPatient extends Patient
那么假设您保存了 class 患者的实例,那么该节点将具有 _Patient 标签,当您保存 EbolaPatient 实例时,它将具有 _EbolaPatient 标签。
如果您随后检索节点(例如,在个人存储库上使用 findAll 作为集合),SDN 将正确地将实体实例化为 Patient 和 EbolaPatient。
如何实现这一点的其他选择是找到位于 class 层次结构最下方的标签,这比使用额外的前缀标签要复杂得多。
要查看详细信息,请参阅 SDN 项目中的 LabelBasedNodeTypeRepresentationStrategy class。