将不同的关系类型映射到一个集合

时间:2013-05-10 12:36:00

标签: neo4j spring-data-neo4j spring-data-graph

我正在尝试将本体术语映射到Neo4j数据结构 确切地说,我有一个Term类和两种类型的关系(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)组合到一个集合中,并且仍然保留关于关系类型的信息(以便显示它)

当然我可以创建一个getter来执行两组中的Sets.union(番石榴),但这样我就失去了有关关系类型的信息。 唯一的非hackish方式是在图数据库中使用一种通用关系类型而不是两种关系类型(is_a,part_of),并将类型作为属性添加到关系中。

还有其他方法吗?

更新1:

似乎我必须使用继承来解决它 Spring Data Neo4j - @RelationshipType issues
http://forum.springsource.org/showthread.php?124110-neo4j-Inheritance-with-RelationshipEntities&highlight=neo4j+inheritance+with+relationshipentities

0 个答案:

没有答案