【问题标题】:Neo4j Spring ogm causes stackoverflow for followers-followings conceptNeo4j Spring ogm 导致追随者追随概念的堆栈溢出
【发布时间】:2020-02-12 12:13:13
【问题描述】:

尝试实现简单的社交网络概念:关注者+关注者。所有这些都只是相互关联的帐户。使用 Neo4j 和 Spring boot。

'org.springframework.boot' version '2.2.4.RELEASE'
'org.springframework.boot:spring-boot-starter-data-neo4j'

Account.class

@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;
}

使用标准弹簧CrudRepository(或Neo4JRepository,没有区别)我经常让stackoverflows 处理帐户。 A 跟在 B 之后,B 跟在 A 之后的最简单情况将导致 findById() 的 SOF。我知道它有smth。与获取深度有关,但默认为 1,这意味着我应该获得帐户的 followersfollowings,但他们的关系应该为空。这些关系在添加方面正常工作:我可以通过添加到适当的Set 来从任何一端连接帐户,并且图表结果完全符合我的意图,但提取不起作用..

主要问题:我在做什么和理解有误,如何才能正确实现这种关系?

我尝试使用深度为 0 的 session.load(),当然没有 SOF,但这并不是我所需要的。默认深度1 应该提供我所需要的,但我想我误解了这个概念?

还有额外的:有没有办法为整个应用程序配置默认深度?无需手动使用session,从而重新实现所有基本操作..

【问题讨论】:

    标签: java spring spring-boot neo4j neo4j-ogm


    【解决方案1】:

    终于明白了。真正的问题不在于获取,而是在获取期间某处对equals()hashcode() 的内部调用。由于我使用 lombok@Data,所有属性都参与了这些方法,导致 SOF。

    @EqualsAndHashCode(exclude={"followers", "followings"}) 添加到类的注释中解决了这个问题,depth=1 现在可以工作了。

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 2021-06-13
      • 2017-12-17
      • 2021-10-09
      • 1970-01-01
      相关资源
      最近更新 更多