我有以下课程:
@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)
时,我总是得到Stackoverflow-Exception,因为用户持有关系,持有用户,持有关系,等等。
这对我来说是错误的使用OGM的方式,我不想限制加载到0的深度。
然而,OGM规范告诉我,没有其他方法,因为RelationshipEntity需要一个Start-和EndNode,并且必须在其中一个中引用。
因此除了将Loading-Depth重新设置为0之外,我没有看到防止此异常的方法。
还有更好的方法吗?
答案 0 :(得分:1)
您将数据公开为JSON。转换器还需要遍历 &#39;对象树&#39;这会导致stackoverflow。
解决方案很简单:您正在User
类中定义传出关系,因此当jackson lib访问关系时,不需要再次访问此对象。
@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;