Neo4j-Spring-数据深度功能不适用于丰富的关系

Neo4j-Spring-Data depth feature is not working with a rich relationship

我正在使用 Neo4j "Neo4j-OGM" 中的 API,但在尝试使用 findAll(int depth) 方法时遇到了困难。 我的问题是,当我拥有丰富的人际关系时,深度就会消失。在某些情况下它可以正常工作,例如 findAll(0)、findById(int id, int depth)、findAll(...) 当结果为 1 时,或者当我有一个简单的关系时。我将分享我的数据结构和 json。

Person.class 和 Friend.class

@NodeEntity
@Data  
public class Person{
     @Id
     private String id;

     private String name;

     @Property("born")
     private int birthyear;

     @JsonIgnoreProperties({"person1"})
     @Relationship(type = "FRIEND_OF")
     @JsonInclude(JsonInclude.Include.NON_NULL)
     private List<Friend> friendOfs;

     @JsonIgnoreProperties({"person"})
     @Relationship(type = "FRIEND_OF",direction = Relationship.INCOMING)
     @JsonInclude(JsonInclude.Include.NON_NULL)
     private List<Friend> friendOfMy ;
}
@Data
@RelationshipEntity(value = "FRIEND_OF")
public class Friend {
     @Id
     @GeneratedValue
     private Long id;
     private String since;

     @StartNode
     @JsonIgnoreProperties({"friendOfs"})
     private Person person1;

     @EndNode
     @JsonIgnoreProperties({"friendOfMy"})
     private Person person;
}

当我向 http://localhost:8080/rest/persons/all/2-> ("2"=depth)

发出获取请求时
[{
        {
    "id": "24",
    "name": "Tony",
    "birthyear": 0,
    "friendOfMy": [
        {
            "id": 0,
            "since": "2008-06-06",
            "person1": {
                "id": "2",
                "name": "Lina",
                "birthyear": 0,
                "friendOfMy": [
                    {
                        "id": 460,
                        "since": "2008-06-06",
                        "person1": {
                            "id": "1",
                            "name": "Fernando",
                            "birthyear": 0,
                            "friendOfMy": [
                                {
                                    "id": 462,
                                    "since": "2008-06-06",
                                    "person1": {
                                        "id": "4",
                                        "name": "Sui",
                                        "birthyear": 0
                                    }
                                }
                            ]
                        }
                    }
                ]
            }
        }
    ]},
     {
        "id": "3",
        "name": "Wlisses",
        "birthyear": 0,
        "friendOfMy": [
            {
                "id": 461,
                "since": "2000-06-06",
                "person1": {
                    "id": "1",
                    "name": "Fernando",
                    "birthyear": 0,
                    "friendOfMy": [
                        {
                            "id": 462,
                            "since": "2008-06-06",
                            "person1": {
                                "id": "4",
                                "name": "Sui",
                                "birthyear": 0
                            }
                        }
                    ]
                }
            }
        ]
    },
    .
    .
    .
    {
        "id": "1",
        "name": "Fernando",
        "birthyear": 0,
        "friendOfs": [
            {
                "id": 461,
                "since": "2000-06-06",
                "person": {
                    "id": "3",
                    "name": "Wlisses",
                    "birthyear": 0
                }
            },
            {
                "id": 460,
                "since": "2008-06-06",
                "person": {
                    "id": "2",
                    "name": "Lina",
                    "birthyear": 0,
                    "friendOfs": [
                        {
                            "id": 0,
                            "since": "2008-06-06",
                            "person": {
                                "id": "24",
                                "name": "Tony",
                                "birthyear": 0
                            }
                        }
                    ]
                }
            }
        ],
        "friendOfMy": [...]
    }]

如您所见,第一个结果的深度为 3。 我猜,这是因为 Java 的内存引用。

我想知道是否可以解决或者我做错了什么。

不,你在这里没有做错任何事情,你的假设是非常正确的。 Neo4j-OGM 缓存在事务/会话期间加载的所有实体。 在 findAll 的情况下,它收集所有已加载的实体并将它们分配给它们的关系。这意味着如果它在第二层找到 Sui - 正如你定义的深度 - Wlisses' 朋友,它将把它附加到 FernandoTony的结果中是否是匹配关系。

目前 Neo4j-OGM 中没有机制可以避免这种情况。