在spring-data-neo4j-4中为继承的节点添加第二个标签

tro*_*oig 2 java neo4j spring-data spring-data-neo4j spring-data-neo4j-4

让我们有这个类结构:

@NodeEntity
abstract class BasicNodeEntity {
    @GraphId
    private Long nodeId;
    //...
}

abstract class IdentifiableEntity extends BasicNodeEntity {
    private String id;
    //...
}

abstract class Ad extends IdentifiableEntity {
    //... Ad attibutes
}

class OfferAd extends Ad {
    // ... OfferAd attibutes
}
Run Code Online (Sandbox Code Playgroud)

OfferAd通过a 保存节点Neo4jRepository,我希望节点有两个标签:OfferAdAd(继承).但是,标签Ad未添加到节点.

我知道我可以通过密码查询来保存节点,但是我想知道它是否可以通过代码Neo4jRepository来实现.

我已经回顾了这个问题(与SDN3相关),我认为它与我的用例非常接近,但它似乎无法正常工作......

任何帮助,将不胜感激.谢谢

Jas*_*ues 8

标签规则如下:

  • 层次结构中的任何普通具体类都默认生成标签
  • 普通抽象类默认不生成标签
  • plain interface默认不生成标签
  • 任何使用@NodeEntity或@NodeEntity(label ="something")注释的类都会生成一个标签
  • 不得允许使用空标签或空标签
  • 不要持久化的类/层次结构必须使用@Transient注释

因此,如果从基类中删除摘要或添加@NodeEntity注释,则应该看到预期的结果.

此外(OGM 2.0.4中的新增功能和2.0.5中的修补程序),您可以通过创建类型字段Collection<String>并使用其注释来添加和删除其他标签@Labels,例如:

@Labels
private List<String> labels = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

要使用2.0.4版(gradle):

compile "org.neo4j:neo4j-ogm-core:{version}"
compile "org.neo4j:neo4j-ogm-http-driver:{version}"
Run Code Online (Sandbox Code Playgroud)