在 OGM 中加载 RelationshipEntity 时出现 Stackoverflow 异常

Stackoverflow-Exception while loading RelationshipEntity in OGM

我有以下 类:

@NodeEntity
public class Item{
  //...
}

@RelationshipEntity(type = "HAS")
public class HasRelation{
  //...
  @StartNode
  private User user;

  @EndNode
  private Item item;
}

@NodeEntity
public class User{
  //...
  @Relationship(type="HAS")
  private Set<HasRelation> has;
}

所以现在我有一个 ID 为 1 的用户 Sven 在数据库中有一个项目 Hammer 并且想要加载它。 当我调用 OGM session.load(User.class, 1) 时,我总是得到一个 Whosebug 异常,因为用户持有关系,持有用户,持有关系,等等。 这对我来说是错误的使用 OGM 的方式,我不想将加载的深度限制为 0。 但是 OGM 规范告诉我,没有其他方法,因为 RelationshipEntity 需要 Start- 和 EndNode 并且必须在其中之一中引用。 因此,除了将 Loading-Depth 限制为 0 之外,我看不到防止此异常的方法。 有没有更好的方法?

您将数据公开为 JSON。转换器还需要遍历 'object tree' 这会导致计算器溢出。

解决方案很简单:您在 User class 中定义传出关系,因此当 jackson 库命中该关系时不需要再次访问该对象。

@RelationshipEntity(type = "LIKES")
public class LikedBook {

@Id
@GeneratedValue
private Long id;

private String how;

@StartNode
@JsonIgnore // <- "do not go back"
private User user;

@EndNode
private Book book;