Получите список узлов и связей с помощью spring @Query

#java #spring #neo4j

Вопрос:

Я пытаюсь создать собственную визуализацию схем, хранящихся в базе данных Neo4j, с помощью Java Spring и React. Чтобы визуализировать схему, выбранную по ее идентификатору, мне нужно получить список узлов и связей. Как я могу это сделать с помощью Java Spring и запроса Cypher?

Я пытался сделать что-то подобное:

Объект схемы:

 @Node
public class Scheme {
    @Getter @Setter
    @Id
    private Long scheme_id;

    @Getter @Setter
    private String name;

    @Getter @Setter
    private String description;

    @Relationship(type = "CONSISTS_OF", direction = Relationship.Direction.OUTGOING)
    private List<Object> objectList = new ArrayList<>();
}
 

Контроллер схемы:

 @RestController
@RequestMapping("/api/scheme")
@CrossOrigin("*")
public class SchemeController {
    
    @Autowired
    private SchemeService schemeService;

    @GetMapping("/{id}/nodes")
    Mono<List<Node>> getNodesById(@PathVariable Long id) {
        return schemeService.findNodesById(id);
    }
}
 

Класс узлов для сопоставления:

 @Getter @Setter
@AllArgsConstructor
@NoArgsConstructor
public class Node {
    
    @Getter @Setter
    private Long identity;

    @Getter @Setter
    private List<String> labels;

    @Getter @Setter
    private Map<String, java.lang.Object> properties;
}
 

Схема Обслуживания:

 @Service
public class SchemeService {
    @Autowired
    SchemeRepository schemeRepository;

    public Mono<List<Node>> findNodesById(Long id) {
        return schemeRepository.findNodesById(id);
    }
}
 

Scheme Repository:

 public interface SchemeRepository extends ReactiveNeo4jRepository<Scheme, Long> {
    @Query("MATCH (s:Scheme)-[con:CONSISTS_OF]->(nod1:Object)-[rel:CONNECTED_TO*]-(nod2:Object) WHERE (s.scheme_id=$id) RETURN DISTINCT nod1;")
    Mono<List<Node>> findNodesById(Long id);
}
 

But I got this:

 {
    "identity":null,
    "labels":null,
    "properties":null
}
 

To summarize, I want to get a lists like these (that I’m getting just using Sypher query) when I make a get request for nodes and relationships:

 {
   "identity":4,
   "labels":[
      "Object"
   ],
   "properties":{
      "name":"PC3",
      "obj_id":4,
      "type":1
   }
},
{
   "identity":3,
   "labels":[
      "Object"
   ],
   "properties":{
      "name":"PC2",
      "obj_id":3,
      "type":1
   }
},
{
   "identity":2,
   "labels":[
      "Object"
   ],
   "properties":{
      "name":"PC1",
      "obj_id":2,
      "type":1
   }
}