我有User实体;该用户可以是多个组的成员,也可以是一个组织的成员。有几种处理这种关系的选项:


User具有字段Set<Group> groupsOrganization organization
GroupOrganization的字段为Set<User> users
这两个选项可以同时使用(双向关系)


此外,还有用于指定方向的关系的注释:


Spring Data Neo4j默认情况下确保任何两个给定实体之间只有一种给定类型的关系。此规则的例外情况是,当两个相同类型的实体之间的关系被指定为“出站”或“入站”时。在这种情况下,两个实体之间可能具有给定类型的两种关系,任一方向都具有一种关系。

如果您不关心方向,则可以指定
direction = Relationship.UNDIRECTED将保证路径
两个节点实体之间的导航可从任一侧导航。


资料来源:Good Relationships: The Spring Data Neo4j Guide Book

我希望尽快获得一组用户和该组中的用户时,我最终采用了一种同时使用上面列出的两个选项的方法,并将每个关系都注释为UNDIRECTED,因为它看起来像通用方法。它有什么缺点吗?如果是这样,哪种方法更好?

最佳答案

由于您要为一个用户以及一个组中的用户检索组,因此按照#1和#2中的描述来设置对象模型是很有意义的。

UNDIRECTED在这里不是一个很好的选择,因为它暗示用户和组之间的关系可以在任何方向上,而且我猜您在图形模型中不希望这样做。
对于不需要关心方向的关系(例如(user1)-[:FRIEND]-(user2)),这非常有用。
我会在两个类中都使用OUTGOINGINCOMING,这取决于您实际上在用户和组之间的关系。

关于java - Spring Data Neo4j:处理关系的正确方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39020458/

10-16 16:19