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}"