2017-05-23 3 views
0

Spring 데이터 Neo4j를 사용하여 Java 엔티티를 Neo4j 데이터베이스에 작성하고 있습니다. 객체 모델은 다소 일반적인 것입니다 :수퍼 클래스의 일반 관계

public abstract class AbstractNode { 
    @GraphId 
    private Long id; 

    @Index(primary = true, unique = true) 
    private String uuid; 

    @Relationship(type = "CONTAINS") 
    private Set<AbstractNode> containsNode; 

    ... 
} 

@NodeEntity 
public class Country extends AbstractNode { ... } 

@NodeEntity 
public class Region extends AbstractNode { ... } 

@NodeEntity 
public class City extends AbstractNode { ... } 

나는 1 개의 국가를 만들고 있습니다. 이 나라에 1 지역을 넣고 지역에 1 도시를 넣습니다. 그 후, 영구 전체 그래프를 만들기 위해 (물론, Neo4jRepository에서 상속 내 자신의 인터페이스) Neo4jRepository.save(country) 전화 : 임베디드 Neo4j의 로그에서

Country -> Region -> City

을, 나는 볼 수 한 나라, 한 지역 1 개의 시가 지속되었습니다.

이제 새로운 세션에서 국가를로드합니다. 결과는 1 개 국가의 1 개 국가입니다.

Country -> Region -> Country

가 어떻게 같은 일반 객체 그래프를 유지할 수 있습니다 :하지만 지역은 도시 그러나 국가를 포함하지 않는 이유는 무엇입니까?

답변

0

당신은뿐만 아니라 @RelationshipcontainsNode에 대한 세터 주석을해야합니다

// direction defaults to OUTGOING, using it here just for clarity 
@Relationship(type = "CONTAINS", direction = "OUTGOING") 
public void setContainsNode(Set<AbstractNode> containsNode) { 
    this.containsNode = containsNode; 
} 

이 OGM/SDN이 나라에서 지역에 들어오는 CONTAINS 관계를 일치 시키려고과의 세터를 발견하지 않는 경우 일치하는 유형 및 사용합니다. setter에서 @Relationship을 사용하면 OUTGOING 및 객체가 올바르게 매핑되어야 함을 나타냅니다.

+0

감사합니다. 그로 인해 문제가 해결되었습니다. – mre