我正在尝试将本体术语映射到 Neo4j 数据结构。
准确地说,我有一个Term
类和两种类型的关系(is_a
和part_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
用数据填充 a 。它应该看起来像这样:
-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)组合到一个集合中,并且仍然保留有关关系类型的信息(以便显示它)
当然,我可以创建一个执行Sets.union
两组(番石榴)的吸气剂,但是这样我会丢失有关关系类型的信息。唯一的非hackish方法是使用一种通用关系类型而不是图形数据库中的两种关系类型(is_a,part_of),并将类型作为属性添加到关系中。
还有其他方法吗?
更新1:
看来我必须使用继承来解决它
Spring Data Neo4j - @RelationshipType 问题
http://forum.springsource.org/showthread.php?124110-neo4j-Inheritance-with-RelationshipEntities&highlight=neo4j+inheritance+with+relationshipentities