2016-10-27 8 views
1

データモデル:親データをツリーデータ構造内の子コレクションのメンバーとしてフェッチするspringデータneo4jを避けるにはどうすればよいですか?

Iは、:Nodeタイプのノードが同じタイプのノードに対する親であることができるのNeo4jに格納されたツリー構造を有します。 tree structure

:Node右側にノードが表示されます。 (赤色で表示)ツリーのルートは、葉といくつかの属性を共有するので、AbstractNodeという抽象クラスがあります:親ノードの

public abstract class AbstractNode { 
    private Long id; 
    @NotEmpty 
    private String code; 
    @Relationship(type = "SUBTREE_OF", direction = Relationship.INCOMING) 
    private Set<Node> children; 

    <getters & setters omitted> 
} 

クラス:子供のための

public class CodeSet extends AbstractNode { 
    @Relationship(type = "SUBTREE_OF", direction = Relationship.OUTGOING) 
    private Application parent; 

    <getters and setters omitted> 
} 

クラスノード:

public class Node extends AbstractNode { 
    @NotEmpty 
    private String description; 
    @NotEmpty 
    private String type; 
    @NotEmpty 
    private String name; 
    @NotNull 
    @Relationship(type = "SUBTREE_OF", direction = Relationship.OUTGOING) 
    private AbstractNode parent; 

    <getters and setters omitted> 
} 

サービス層:

このメソッドは、指定の深さにノード情報を取得するために使用されます。

@Transactional(readOnly = true) 
    public Node findById(Long id, int depth) throws EntityNotFoundException { 
     Node entity = nodeRepository.findOne(id, depth); 
     if (entity == null) { 
     throw new EntityNotFoundException(String.format("Node %d not found", id)); 
     } else { 
      return entity; 
     } 
    } 

問題::Nodeノードをフェッチする場合 、同じタイプの親を持っているものは、子どもたちのリストにこれらの親を持っています明らかに間違っていて、他の問題を引き起こします。説明したデータセットについては、デバッガのスクリーンショットを参照してください。 debugger screenshot

解決方法

+0

どのバージョンのSDNとOGMを使用していますか? – digx1

+0

@ digx1 'org.springframework.data:spring-data-neo4j:4.1.2.RELEASE'と対応する' org.neo4j:neo4j-ogm-core:2.0.3' – Polyakoff

答えて

3

SpringデータNeo4j(SDN)では、同じタイプの着信と発信の関係がある場合、着信関係フィールドのフィールドとセッター/ゲッターの両方に注釈を付ける必要があります。そうしないと、誤ったマッピングが行われます。

これはSDN documentationに言われている。

OUTGOINGに@Relationshipのデフォルトの方向属性。 INCOMING関係でサポートされているフィールドやメソッドには、INCOMING方向で明示的に注釈を付ける必要があります。

neo4j-ogm(これは春データneo4j 4+で使用されるマッピングライブラリ)で作成された問題/機能要求もあります。

+0

現在の3.0RC1リリースでは、フィールドに注釈を付けるのに十分なはずですか? –

+0

はい、 '@ Relationship'アノテーションは3.x以降のフィールドのみです –

関連する問題