Для создания RelationshipEntity мне нужно использовать следующую конструкцию:
@RelationshipEntity(type = "PLAYED_IN")
public class Role {
@Id @GeneratedValue private Long relationshipId;
@Property private String title;
@StartNode private Actor actor;
@EndNode private Movie movie;
}
У меня вопрос - можно ли параметризовать тип RelationshipEntity? Прямо сейчас в приведенном выше примере у нас есть жестко запрограммированный тип PLAYED_IN, но мне нужно использовать многие другие типы, например, DIRECTOR_IN, WRITER_IN и так далее. Как добиться этого с помощью SDN, не вводя для этого отдельные классы RelationshipEntity?
Одно из возможных решений - определить тип задания как свойство RelationshipEntity, но я не уверен, что это хорошая идея, потому что у меня ~ 30 миллионов сущностей, а AFAIK Neo4j не поддерживает индексы для свойств RelationshipEntity ... Пожалуйста, сообщите.
Это всего лишь образец класса, скопированный из официальной документации SDN. Кроме того, я думаю о введении промежуточного узла вместо отношения
Может, это больше подходит для вашей проблемы. Каждый RelationshipEntity рассматривается Neo4j-OGM как нечто «фиксированное» (без наследования бизнес-логики, изменения типов и т. д.)





Как насчет того, чтобы положиться на абстрактный класс с общими основами и унаследовать от него все необходимые роли?
abstract class BaseRelationship {
@Id
@GeneratedValue
private Long relationshipId;
@Property
private String title;
[...]
}
и
@RelationshipEntity(type = "PLAYED_IN")
public class Role extends BaseRelationship {
[...]
}
По-прежнему потребуется определять отдельный класс для каждого типа отношений, но я предпочитаю избегать этого.
Я предполагаю, что название имеет другое значение, чем название фильма, или? Поскольку с учетом приведенного выше класса возможны простые отношения, если вам не нужен заголовок собственности. Если это невозможно, ответ ThirstForKnowledge - лучшее, что вы можете сделать в этой ситуации.