我有User
实体;用户可以是多个组的成员,并且是一个组织的成员。有几种方法可以处理这种关系:
User
包含字段Set<Group> groups
和Organization organization
Group
和Organization
包含字段Set<User> users
此外,还有与指定方向的关系注释:
Spring Data Neo4j默认确保在任何两个给定实体之间只存在给定类型的一个关系。此规则的例外情况是在两个相同类型的实体之间将关系指定为OUTGOING或INCOMING。在这种情况下,可以在两个实体之间具有给定类型的两个关系,在任一方向上都有一个关系。
如果您不关心方向,那么您可以指定 direction = Relationship.UNDIRECTED,它将保证路径 两个节点实体之间可以从任何一方导航。
来源:Good Relationships: The Spring Data Neo4j Guide Book
只要我希望能够尽可能快地获取组内的用户和用户组,我就会同时使用上面列出的两个选项,并将每个关系注释为{ {1}}因为它看起来像普遍的做法。它有任何缺点吗?如果是这样,哪种方法会更好?
答案 0 :(得分:1)
由于您要为用户和组中的用户检索组,因此按照您在#1和#2中的描述设置对象模型是有意义的。
UNDIRECTED
在这里不是一个好选择,因为它意味着用户和群组之间的关系可以在任何方向,我猜你不想在你的图模型中这样做。
这对于你不关心方向的关系(例如(user1)-[:FRIEND]-(user2)
)有好处,但不是其他方面。
我会在任一课程中使用OUTGOING
和INCOMING
,具体取决于用户与群组之间的关系。