尝试实施简单的社交网络概念:关注者+关注者。所有仅仅是彼此相关的帐户。使用Neo4j和Spring启动。
'org.springframework.boot' version '2.2.4.RELEASE'
'org.springframework.boot:spring-boot-starter-data-neo4j'
帐户类
@NodeEntity
public class Account {
@Id
private String pk;
@Relationship(type = "FOLLOWS", direction = Relationship.INCOMING)
private Set<Account> followers;
@Relationship(type = "FOLLOWS", direction = Relationship.OUTGOING)
private Set<Account> followings;
}
使用standart spring CrudRepository
(或Neo4JRepository
没有区别),我不断获得使用帐户的stackoverflows。A
遵循B
和B
遵循的最简单情况A
将导致产生SOF findById()
。我了解它具有一定的安全性。与获取深度有关,但它默认为1,这意味着我应该了解到followers
,followings
但它们的关系应该为空。该关系在添加方面可以正常工作:我可以通过添加到适当的位置来连接任何一端的帐户,Set
并且图形完全符合我的预期,但是提取不起作用。
主要问题:我在做什么并且理解错误,可以采取什么措施正确地实现这种关系?
session.load()
当然,我尝试使用深度0,并且没有SOF,但这并不是我真正需要的。默认深度 1
应该提供我所需要的,但是我想我误解了这个概念?
另外:有没有一种方法可以为整个应用程序配置默认深度?无需session
手动使用,从而重新实现所有基本操作。
最后,明白了。真正的问题不在于获取,而在于内部调用中equals()
以及hashcode()
获取期间的某个地方。由于我使用龙目岛有@Data
,所有属性paricipated在这些方法中,造成SOF。
添加@EqualsAndHashCode(exclude={"followers", "followings"})
到类的注释中解决了该问题,并且depth = 1现在可以使用。