让我们有这样的类结构:
@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
代替。
我已经查看了 this question (与 SDN3 相关)并且我认为它非常接近我的用例,但它似乎不起作用......
如有任何帮助,我们将不胜感激。谢谢
最佳答案
标签规则如下:
- 层次结构中的任何普通具体类默认生成一个标签
- 普通抽象类默认不生成标签
- 普通界面默认不生成标签
- 任何用@NodeEntity 或@NodeEntity(label="something") 注释的类都会生成一个标签
- 不得使用空标签
- 不被持久化的类/层次结构必须用@Transient注解
因此,如果您从基类中删除抽象,或添加 @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}"
关于java - 为 spring-data-neo4j-4 中的继承节点添加第二个标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39171502/