#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
}
}