代码之家  ›  专栏  ›  技术社区  ›  Bojan Vukasovic

Spring数据neo4j-多态性儿童收集

  •  0
  • Bojan Vukasovic  · 技术社区  · 5 年前

    我有以下课程:

    public interface Label {
      String getValue();
    }
    
    @Node
    @Data
    public class SimpleLabel implements Label {
      @Id
      @GeneratedValue
      private Long id;
      private String value;
    
      @Relationship(value = "JE")
      private Set<SimpleLabel> labels = new HashSet<>();
    
      public void addLabel(SimpleLabel label){
        labels.add(label);
      }
    }
    
    @Node
    @Data
    public class HyperLabel implements Label {
      @Id
      @GeneratedValue
      private Long id;
    
      @Relationship(value = "JE")
      private Set<Label> labels = new HashSet<>();
    
      public void addLabel(Label label){
        labels.add(label);
      }
    
      @Override
      public String getValue() {
        return labels.stream().map(Label::getValue).collect(Collectors.joining("; "));
      }
    }
    

    这是我使用的查询:

      @Query("MATCH (h:HyperLabel)-[r:JE]-(s:SimpleLabel) WHERE ID(h)=$id RETURN h,COLLECT(r),COLLECT(s)")
      Optional<HyperLabel> getById(Long id);
    

    我的问题是 labels 查询返回的集合为空。但如果我在密码上稍作修改 HyperLabel 阶级(变化) Set<Label> Set<SimpleLabel> ),然后它就工作了。

    有什么方法可以让它与 Label 接口,因为 超标签 两者都可以 超标签 SimpleLabel 实例?

    0 回复  |  直到 5 年前