向 spring-data-neo4j-4 中的继承节点添加第二个标签
Add a second label to an inherited node in spring-data-neo4j-4
让我们有这个 class 结构:
@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
class 一样简单。
似乎 spring-data-neo4j-4
默认情况下只为每个节点创建一个标签,即使该节点继承了另一个标签。
如果我们想让SDN也添加父标签classes,我们需要给它们添加@NodeEntity
。
所以,对于这个用例,如果我们将它添加到 Ad
class,
@NodeEntity
abstract class Ad extends IdentifiableEntity {
//... Ad attibutes
}
当我们通过 Neo4jRepository
保存 OfferAd
时,创建的节点将具有两个标签:Ad
和 OfferAd
。
标签规则如下:
- 层次结构中的任何普通混凝土class默认生成一个标签
- 普通摘要class默认不生成标签
- 普通界面默认不生成标签
- 任何用@NodeEntity 或@NodeEntity(label="something") 注释的class 生成一个标签
- 不得使用空标签或空标签
- classes / 不被持久化的层级必须用@Transient注解
因此,如果您从基础 class 中删除摘要,或添加 @NodeEntity
注释,您应该会看到预期的结果。
此外(OGM 2.0.4 中的新增功能和 2.0.5 中的修复),您可以通过创建 Collection<String>
类型的字段并使用 @Labels
对其进行注释来添加和删除其他标签,例如示例:
@Labels
private List<String> labels = new ArrayList<>();
要使用版本 2.0.4 (gradle):
compile "org.neo4j:neo4j-ogm-core:{version}"
compile "org.neo4j:neo4j-ogm-http-driver:{version}"
让我们有这个 class 结构:
@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
代替。
我已经查看了
如有任何帮助,我们将不胜感激。谢谢
就像将 @NodeEntity
注释添加到 Ad
class 一样简单。
似乎 spring-data-neo4j-4
默认情况下只为每个节点创建一个标签,即使该节点继承了另一个标签。
如果我们想让SDN也添加父标签classes,我们需要给它们添加@NodeEntity
。
所以,对于这个用例,如果我们将它添加到 Ad
class,
@NodeEntity
abstract class Ad extends IdentifiableEntity {
//... Ad attibutes
}
当我们通过 Neo4jRepository
保存 OfferAd
时,创建的节点将具有两个标签:Ad
和 OfferAd
。
标签规则如下:
- 层次结构中的任何普通混凝土class默认生成一个标签
- 普通摘要class默认不生成标签
- 普通界面默认不生成标签
- 任何用@NodeEntity 或@NodeEntity(label="something") 注释的class 生成一个标签
- 不得使用空标签或空标签
- classes / 不被持久化的层级必须用@Transient注解
因此,如果您从基础 class 中删除摘要,或添加 @NodeEntity
注释,您应该会看到预期的结果。
此外(OGM 2.0.4 中的新增功能和 2.0.5 中的修复),您可以通过创建 Collection<String>
类型的字段并使用 @Labels
对其进行注释来添加和删除其他标签,例如示例:
@Labels
private List<String> labels = new ArrayList<>();
要使用版本 2.0.4 (gradle):
compile "org.neo4j:neo4j-ogm-core:{version}"
compile "org.neo4j:neo4j-ogm-http-driver:{version}"