我有User
实体;该用户可以是多个组的成员,也可以是一个组织的成员。有几种处理这种关系的选项:
类User
具有字段Set<Group> groups
和Organization organization
类Group
和Organization
的字段为Set<User> users
这两个选项可以同时使用(双向关系)
此外,还有用于指定方向的关系的注释:
Spring Data Neo4j默认情况下确保任何两个给定实体之间只有一种给定类型的关系。此规则的例外情况是,当两个相同类型的实体之间的关系被指定为“出站”或“入站”时。在这种情况下,两个实体之间可能具有给定类型的两种关系,任一方向都具有一种关系。
如果您不关心方向,则可以指定
direction = Relationship.UNDIRECTED将保证路径
两个节点实体之间的导航可从任一侧导航。
资料来源:Good Relationships: The Spring Data Neo4j Guide Book
我希望尽快获得一组用户和该组中的用户时,我最终采用了一种同时使用上面列出的两个选项的方法,并将每个关系都注释为UNDIRECTED
,因为它看起来像通用方法。它有什么缺点吗?如果是这样,哪种方法更好?
最佳答案
由于您要为一个用户以及一个组中的用户检索组,因此按照#1和#2中的描述来设置对象模型是很有意义的。UNDIRECTED
在这里不是一个很好的选择,因为它暗示用户和组之间的关系可以在任何方向上,而且我猜您在图形模型中不希望这样做。
对于不需要关心方向的关系(例如(user1)-[:FRIEND]-(user2)
),这非常有用。
我会在两个类中都使用OUTGOING
和INCOMING
,这取决于您实际上在用户和组之间的关系。
关于java - Spring Data Neo4j:处理关系的正确方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39020458/