2017-05-23 9 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都市は維持された。

新しい国のセッションで国を読み込みます。その結果、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

関連する問題