Я использую пользовательский запрос spring data neo4j и выставляю его в успокоительный API, но я не пишу QueryResult
, а пишу соответствующие NodeEntity
и RelationshipEntity
бины, но только узел может
быть сопоставленным с NodeEntity
, отношение не может быть сопоставлено с RelationshipEntity
Я написал bean-компоненты NodeEntity и RelationshipEntity, репозиторий и пользовательский запрос, а также создал два узла и отношения в neo4j и контроллер покоя, чтобы показать json
во-первых, я создаю данные в neo4j:
CREATE (n:Person2 { name: 'tom'})
CREATE (n:Person2 { name: 'jim'})
MATCH (a:Person2),(b:Person2)
WHERE a.name = 'tom' AND b.name = 'jim'
CREATE (a)-[r:Relation2 { name: 'onelink' }]->(b)
RETURN type(r), r.name
затем напишите код, используя данные пружины:
@NodeEntity(label = "Person")
@Data
public class Person2 {
@Id
@GeneratedValue
private Long id;
private String name;
private String personProp = "someone";
}
@RelationshipEntity(type = "Relation2")
@Data
public class Relation2 {
@Id
@GeneratedValue
private Long id;
private String r2prop="yeyeye";
private String name;
}
Хранилище
public interface NeiborRepository extends Neo4jRepository {
@Query("MATCH (n {name:'tom'})-[r]->(m {name:'jim'}) return n,r,m")
Iterable<Map<String,Object>> neibor(String identifier);
}
Контроллер
@RestController
@RequestMapping(path = "/api")
public class Neo4jApi {
private NeiborRepository neibor;
@Autowired
public Neo4jApi(NeiborRepository neibor) {
super();
this.neibor = neibor;
}
@GetMapping(path = "neibor")
public Iterable<Map<String, Object>> neibor(String identifier) {
Iterable<Map<String, Object>> coms = neibor.neibor(identifier);
return coms;
}
}
Тогда я посещаю http://127.0.0.1:8080/api/neibor
результат:
[{
"n": {
"id": 7206,
"name": "tom",
"personProp": "someone"
},
"r": {
"id": 26,
"version": null,
"type": "Relation2",
"startNode": 7206,
"endNode": 21,
"primaryIdName": null,
"propertyList": [{
"key": "name",
"value": "onelink"
}]
},
"m": {
"id": 21,
"name": "jim",
"personProp": "someone"
}
}]
Внимание на r.propertyList, для узла person все свойства взяты из bean-компонента Person2, даже отображается «personProp», но для отношения, похоже, он не соответствует bean-компоненту Relation2.
Итак, я пытаюсь изменить имя класса Person2 на Person3, результат json становится:
[{
"n": {
"id": 7206,
"version": null,
"labels": ["Person2"],
"removedLabels": null,
"primaryIndex": null,
"propertyList": [{
"key": "name",
"value": "tom"
}]
},
"r": {
"id": 26,
"version": null,
"type": "Relation2",
"startNode": 7206,
"endNode": 21,
"primaryIdName": null,
"propertyList": [{
"key": "name",
"value": "onelink"
}]
},
"m": {
"id": 21,
"version": null,
"labels": ["Person2"],
"removedLabels": null,
"primaryIndex": null,
"propertyList": [{
"key": "name",
"value": "jim"
}]
}
}]
Тогда я полагаю, данные пружины и пересчет отображают узел в bean-компонент класса Person2, потому что
имя класса и метка узла оба Person2
. но тип отношения Relation2
, но он не сопоставлен с Relation2
классом компонента
Здесь, почему я не использую QueryResult, это отношения между человеком и человеком, иногда между человеком и компанией, я хочу написать только один API
Я использую весеннюю загрузку 2.0.4 и добавляю neo4j lombok web и devtool
Я ожидал, что он может вернуть json, как показано ниже:
[{
"n": {
"id": 7206,
"name": "tom",
"personProp": "someone"
},
"r": {
"id": 26,
"name": "onelink"
"r2prop":"yeyeye"
},
"m": {
"id": 21,
"name": "jim",
"personProp": "someone"
}
}]