在2个节点之间创建关系时创建一个关系(Spring,Neo4j)

时间:2019-12-11 10:52:04

标签: spring neo4j spring-data cypher spring-data-neo4j

您好,我正在使用spring数据和neo4j。 在我的系统中注册新药品时,我希望它与药品商店中实际存在的插槽建立联系。为此,我首先要检查现在是否有空闲插槽,并采用最小编号:

MATCH (s:Slot) WHERE NOT (s)<-[:in_slot]-()
WITH MIN(s.number) AS minSlotNumber
MATCH (s2:Slot) WHERE s2.number = minSlotNumber
RETURN s2

我在我的存储库中将此查询定义为

@Query(Query)
Long checkForFreeSlot();

如果有空闲的空位,则应分配给新注册的药品一个关系,否则 应该创建一个带有这样的插槽的新盒子。

OPTIONAL MATCH (b:Box) WITH COALESCE(MAX(b.number), 0)+1 as lastBoxNumber
CREATE (b:Box {number: lastBoxNumber})
WITH b
OPTIONAL MATCH (s:Slot)
WITH COALESCE(MAX(s.number), 0) AS lastExistingSlotNumber, b
FOREACH (i in range(lastExistingSlotNumber+1, lastExistingSlotNumber+50) | CREATE (:Slot {number: 
i})-[:IN_BOX]->(b))

我在我的存储库中将此查询定义为

@Query("Query2")
Void createNewBoxWithSlots();

在此之后,应该再次调用第一个查询,因此我们可能正在谈论递归函数?这在我的DrugController.java中看起来像这样。

@PostMapping("/drugs")
public ResponseEntity<Drug> createDrug(@RequestBody Drug drug) {
   Long slot = drugsRep.?????();
   ......
   Drug newDrug = drugsRep.save(drug);
   ......
   return ResponseEntity.ok(newDrug);
}

我应该如何在控制器中处理该问题?以及应该如何在两个节点(药品和广告位)之间建立这种关系?

0 个答案:

没有答案