У меня есть объект User
; пользователь может быть членом нескольких групп и быть членом одной организации. Есть несколько вариантов для обработки таких отношений:Данные весны neo4j: правильный способ обработки отношений?
- Класса
User
имеет полеSet<Group> groups
иOrganization organization
- Классы
Group
иOrganization
имеет полеSet<User> users
- Оба варианта используется одновременно (вид двунаправленных отношений)
Кроме того, есть аннотации к описаниям с указанием направлений:
Данные весны Neo4j по умолчанию гарантирует, что между любыми двумя заданными объектами существует только одна связь данного типа. Исключение из этого правила заключается в том, что связь задается как исходящая или входящая между двумя объектами того же типа. В этом случае между двумя объектами можно иметь две связи данного типа: одно отношение в любом направлении.
Если вы не заботитесь о направлении, вы можете указать direction = Relationship.UNDIRECTED, который гарантирует, что путь между двумя узловыми объектами будет проходить с любой стороны.
Источник: Good Relationships: The Spring Data Neo4j Guide Book
Как только я хочу, чтобы иметь возможность получить группы пользователей и пользователей в группе так же быстро, как я могу, я закончил с подходом с использованием двух вариантов, перечисленных выше, на в то же время, а также аннотировать каждое отношение как UNDIRECTED
, потому что это похоже на универсальный подход. Есть ли у него какие-то недостатки? Если да, то какой подход был бы лучше?