Java 为什么SpringDataNeo4j在节点上创建下划线前缀标签?
我意识到有人问过类似的问题,但我试图理解SDN创建与我的类名匹配的标签以及创建以下划线为前缀的相同标签的方法背后的原因 比如说,我有一个病人课程。当我通过Neo4j存储库创建@NodeEntity修饰的Patient类,然后通过Neo4j web控制台查询时,我看到Patient和_Patient作为标签 作为对这个问题的扩展,假设我有以下表示节点的类继承层次结构:Java 为什么SpringDataNeo4j在节点上创建下划线前缀标签?,java,neo4j,spring-data-neo4j,Java,Neo4j,Spring Data Neo4j,我意识到有人问过类似的问题,但我试图理解SDN创建与我的类名匹配的标签以及创建以下划线为前缀的相同标签的方法背后的原因 比如说,我有一个病人课程。当我通过Neo4j存储库创建@NodeEntity修饰的Patient类,然后通过Neo4j web控制台查询时,我看到Patient和_Patient作为标签 作为对这个问题的扩展,假设我有以下表示节点的类继承层次结构: @NodeEntity public class Patient extends Person { //class defi
@NodeEntity
public class Patient extends Person {
//class definition here
}
@NodeEntity
public abstract class Person {
//class definition here
}
当我将患者实例保存到数据库中时,它将有三个标签:Person、Patient、\u Patient。为什么我的节点不也有一个_患者标签?当层次结构有1个以上的非抽象类时,前缀为u的标签允许SDN正确确定类型 例如,当您选择类似的层次结构时
Person
Patient extends Person
EbolaPatient extends Patient
然后假设您保存类Patient的实例,那么节点将有_Patient标签,当您保存EbolaPatient实例时,它将有_EbolaPatient标签
如果随后使用findAll在个人存储库上检索节点(例如作为集合),SDN将正确地将实体实例化为Patient和EbolaPatient
实现这一点的另一个选择是找到一个在类层次结构最底层的标签,这比使用附加前缀标签要复杂得多
要了解如何实现此功能的详细信息,请参阅SDN项目中的课程。在重新阅读我链接的另一个问题后,我可能已经回答了自己的问题,由@JohnMark13发布的答案-我记不清了,但我认为您将为Java类型层次结构中的每个类获得一个标签,并为节点的具体Java类型获得一个下划线前缀标签。不过,我仍然有兴趣更好地理解这个策略。