java - 为 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 {
    //... Ad attibutes
}

class OfferAd extends Ad {
    // ... OfferAd attibutes
}

通过 Neo4jRepository 保存一个 OfferAd 节点,我希望该节点有两个标签:OfferAdAd(继承)。但是,标签 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/

相关文章:

java - 如何使用 Jackson JSON 验证 JSON

java - 调整图像大小以适合 JLabel

neo4j - 这个 Neo4J 可视化中使用了什么插件,它可以在这个页面之外使用吗?

Spring Data MongoDB 文档到期时间

java - 使用 Spring Data 和 MySQL 运行 2 个事务方法时出现死锁

java - Android/Java 中的 Apidaze REST API HTTP POST 调用

java - 匿名内部对象中的 "This"

Neo4j 如何在 Cypher 语句中处理像“\”这样的特殊字符

neo4j - 根据属性更改节点颜色 - neo4j

java - Spring data - 域对象继承和泛型方法