1

オントロジー用語を Neo4j データ構造にマップしようとしています。
正確には、Term クラスと 2 種類の関係 (is_apart_of) があります。私は次のクラスを持っています:

用語クラス:

@NodeEntity
public class Term {
    @GraphId
    private Long nodeId;
    @Indexed(unique=true)
    private String id;
    private String name;
    private String definition;

    @RelatedToVia(type="is_a",direction=Direction.INCOMING)
    private Set<Term2Term> is_a_children;

    @RelatedToVia(type="is_a",direction=Direction.OUTGOING)
    Set<Term2Term> is_a_parents;

    @RelatedToVia(type="part_of",direction = Direction.INCOMING)
    Set<Term2Term> part_of_children;

    @RelatedToVia(type="part_of",direction = Direction.OUTGOING)
    Set<Term2Term> part_of_parents;
}

Term2Term クラス:

@RelationshipEntity
public class Term2Term {

    @GraphId
    Long id;
    @StartNode private Term child;
    @EndNode private Term parent;
}

マッピングは正常に機能し、特定のコレクション (つまり is_a_children) へのアクセスは正常に機能します。ただしNavigationTree、データを入力する必要があるユースケースがあります。次のようになります。

-Term 1 
  - Term 1.1 (is_a)
     -Term 1.1.1 (part_of)
  - Term 1.2 (part_of)
  - Term 1.3 (is_a)
     - Term 1.3.1 (part_of)
     - Term 1.3.2. (is_a)
....

には、さまざまな関係タイプのNavigationalTree概念がありません。

さまざまな関係コレクション (つまり、is_a_children と part_of_children) を 1 つのコレクションに結合し、関係のタイプに関する情報を (表示するために) 保持する必要があります。

もちろんSets.union、2 つのセットの (グアバ) を実行するゲッターを作成できますが、この方法では関係タイプに関する情報が失われます。ハックではない唯一の方法は、グラフ データベースで 2 つの関係タイプ (is_a、part_of) の代わりに 1 つの汎用関係タイプを使用し、そのタイプをプロパティとして関係に追加することです。

他に方法はありますか?

更新 1:

Spring Data Neo4j - @RelationshipType の問題を解決するには、継承を使用する必要があるようです

4

0 に答える 0