Сопоставить разные типы отношений с одной коллекцией
Я пытаюсь отобразить термины онтологии в структуру данных Neo4j.
Если быть точным, у меня есть Term
класс и 2 типа отношений (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
с данными. Это должно выглядеть примерно так:
-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
(гуава) из двух наборов, однако таким образом я теряю информацию о типе отношений. Единственный нехакский способ - использовать один общий тип отношений вместо двух типов отношений (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