您好,我正在使用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);
}
我应该如何在控制器中处理该问题?以及应该如何在两个节点(药品和广告位)之间建立这种关系?