2017-12-08 5 views
0

나는 다음과 같은 클래스가에서로드 RelationshipEntity 동안 :유래-예외 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이 항목을 데이터베이스에 Hammer을 가지고 그것을로드 할있는 사용자 Sven 있습니다. OGM을 호출하면 사용자가 관계를 유지하고, 사용자를 붙잡고, 관계를 유지하기 때문에 항상 Stackoverflow-Exception이 발생합니다. session.load(User.class, 1) 이것은 나를 위해 OGM을 사용하는 잘못된 방법처럼 느껴지고 0으로로드하는 깊이를 제한하고 싶지 않습니다. 그러나 OGM 사양은 RelationshipEntity가 시작을 필요로하므로 다른 방법은 없다고 알려줍니다 - 및 EndNode 중 하나에서 참조되어야합니다. Loading-Depth를 0으로 재구성하는 것 외에는이 예외를 방지 할 수있는 방법이 없습니다. 더 좋은 방법이 있습니까?

+0

'RelationshipEntity'에 속성이 설정되어 있는지 확인하십시오. 이것은 필수 항목입니다. – meistermeier

+0

'RelationshipEntity'는 몇 가지 속성을 가지고 있습니다. 나는 더 나은 가독성을 위해 그들을 무시했다. – Urr4

+1

어떤 OGM 버전을 사용하고 있습니까? 나는 그것을 재현하려고 노력할 것이다. – meistermeier

답변

1

JSON으로 데이터를 노출하고 있습니다. 변환기도 '개체 트리'를 통과해야하며 이로 인해 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; 
+0

이것은 완벽하게 작동합니다. 나는 그 문제가 JSON 변환 안에 있다는 것을 결코 짐작하지 못했다. 아주 많이 고마워! – Urr4

관련 문제