Я использую spring-data-neo4j
с spring-boot
для создания REST-API. Я хочу добавить базовую функциональность CRUD для сущностей (InfoCard
) и отношений (REFERS_TO
). При извлечении сущностей я хочу видеть отношения как минимум глубины = 1.
InfoCard Pojo:
@NodeEntity
public class InfoCard {
@Id @Getter @NonNull
private String id;
@Getter @Setter
private String userId;
@Getter @Setter
private Date dateAdded;
@Getter @Setter
private Date dateChanged;
@Getter @Setter
private boolean removable = true;
@Relationship(type = "REFERS_TO")
@Getter @Setter
private List<InfoCard> referredCards = new ArrayList<>();
@JsonCreator
public InfoCard(@NonNull @JsonProperty(required = true) String id) {
this.id = id;
}
}
Отношения между сущностями:
@RelationshipEntity(type = "REFERS_TO")
public class RefersToLink {
@Id
@Getter
@NonNull
@GeneratedValue
private Long id;
@StartNode
@Getter @Setter
private InfoCard from;
@EndNode
@Getter @Setter
private InfoCard to;
public RefersToLink() {}
}
Я использую Neo4jRepository
классы для функциональности CRUD. Моя проблема в том, что когда я вызываю findAll()
в экземпляре хранилища, я получаю все узлы InfoCard, но он не возвращает ссылочные карточки для каждой InfoCard. Когда я удаляю @RelationshipEntity
и просто использую встроенный @Relationship
, это работает как ожидалось. В документации говорится, что findAll()
по умолчанию использует глубину 1, что означает, что прямые отношения возвращаются даже без параметра.
Что я получаю:
{
"entities": [
{
"id": "35",
"removable": true,
"referredCards": []
},
{
"id": "test3",
"removable": true,
"referredCards": []
}
]
}
Что я хочу :
{
"entities": [
{
"id": "35",
"removable": true,
"referredCards": [
{
"id": "test3",
"removable": true,
"referredCards": []
}
]
},
{
"id": "test3",
"removable": true,
"referredCards": []
}
]
}
Я предпочитаю использовать RelationshipEntity, потому что он будет более гибким, чем другой подход, если я добавлю свойства позже, и я не понимаю, почему это не сработает.