Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring-data-neo4j-4中向继承的节点添加第二个标签_Java_Neo4j_Spring Data_Spring Data Neo4j_Spring Data Neo4j 4 - Fatal编程技术网

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

Java 在spring-data-neo4j-4中向继承的节点添加第二个标签,java,neo4j,spring-data,spring-data-neo4j,spring-data-neo4j-4,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

让我们来看看这个类结构:

@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
}
通过
Neo4jRepository
保存
OfferAd
节点,我希望该节点有两个标签:
OfferAd
Ad
(继承)。但是,标签
Ad
不会添加到节点

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

我已经回顾过(与SDN3相关),我认为它非常接近我的用例,但它似乎不起作用


任何帮助都将不胜感激。谢谢

只需将
@NodeEntity
注释添加到
Ad
类即可。 默认情况下,
spring-data-neo4j-4
每个节点只创建一个标签,即使该节点继承了另一个标签

如果我们想让SDN也添加父标签类,我们需要向它们添加
@NodeEntity

因此,对于这个用例,如果我们将它添加到
Ad
类中

@NodeEntity
abstract class Ad extends IdentifiableEntity {
   //... Ad attibutes
}
当我们通过
Neo4jRepository
保存
OfferAd
时,创建的节点将同时具有两个标签:
Ad
OfferAd


标签的规则如下所示:

  • 默认情况下,层次结构中的任何纯混凝土类都会生成标签
  • 默认情况下,纯抽象类不生成标签
  • 默认情况下,普通接口不生成标签
  • 任何用@NodeEntity或@NodeEntity(label=“something”)注释的类都会生成一个标签
  • 不允许使用空标签或空标签
  • 不能持久化的类/层次结构必须用@Transient注释
因此,如果您从基类中删除抽象,或者添加
@NodeEntity
注释,您应该会看到预期的结果

此外(在OGM 2.0.4中新增,在2.0.5中修复),您可以通过创建类型为
Collection
的字段并使用
@labels
对其进行注释来添加和删除其他标签,例如:

@Labels
private List<String> labels = new ArrayList<>();

感谢您提供标签解释的详细规则。欢迎@troig:)如果您在集成2.0.4/5时遇到任何问题,请告知我们。
compile "org.neo4j:neo4j-ogm-core:{version}"
compile "org.neo4j:neo4j-ogm-http-driver:{version}"