我正在學習Neo4j並通過spring-data-neo4j使用它,但我努力使它適合我的需求。JSON to @RelationshipEntity(通過Spring Boot)
基本上我想來表示:
A -[{...relationshipKey}]-> B
即A包含地圖的BS,以及在地圖上的每個鍵由屬性relationshipKey表示。我這樣做是因爲AFAIU Neo4J不可能存儲地圖。
所以我用@RelationshipEntity這樣的:
@Data
@NodeEntity
class A {
@Relationship(type = "CONTAINS_B")
Set<ContainsB> containsB;
}
@RelationshipEntity(type = "CONTAINS_B")
@Data
class ContainsB {
@GraphId Long id;
@StartNode A a;
@EndNode B b;
@Property RelationshipKey relationshipKey; // an enum
}
@Data
@NodeEntity
class B {
// Whatever
}
我試圖用彈簧啓動控制器,而我傳遞一個JSON保存新圖。
控制器:
@PostMapping(value = BASE_PATH + "/create")
A createA(@RequestBody @NonNull A a) {
return ARepository.save(a);
}
JSON:
{
"containsB": [{
"relationshipKey": "key1",
"b": {"someB": "properties"}
},{
"relationshipKey": "key2",
"b": {"someB": "different properties"}
}]
}
然而,當我調用控制器,我得到這個異常:
org.neo4j.ogm.exception.MappingException:關係實體A(...) 不能缺少開始或結束節點
當我調試控制器調用時,a.getContainsB().iterator().next().getA()
爲空,但a.getContainsB().iterator().next().getB()
已實例化並具有正確的屬性。
如果我的倉庫保存之前做到這一點的話,就好像工作正常,而A和B是正確的關係:
a.getContainsB().iterator().next().setA(new A())
有沒有辦法通過將由Neo4j的正確解釋的JSON ?