Spring数据neo4j:处理关系的正确方法是什么?

时间:2016-08-18 14:11:13

标签: java neo4j spring-data-neo4j-4 neo4j-ogm

我有User实体;用户可以是多个组的成员,并且是一个组织的成员。有几种方法可以处理这种关系:

  1. 班级User包含字段Set<Group> groupsOrganization organization
  2. GroupOrganization包含字段Set<User> users
  3. 两个选项同时使用(双向关系的种类)
  4. 此外,还有与指定方向的关系注释:

      

    Spring Data Neo4j默认确保在任何两个给定实体之间只存在给定类型的一个关系。此规则的例外情况是在两个相同类型的实体之间将关系指定为OUTGOING或INCOMING。在这种情况下,可以在两个实体之间具有给定类型的两个关系,在任一方向上都有一个关系。

         

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

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

    只要我希望能够尽可能快地获取组内的用户和用户组,我就会同时使用上面列出的两个选项,并将每个关系注释为{ {1}}因为它看起来像普遍的做法。它有任何缺点吗?如果是这样,哪种方法会更好?

1 个答案:

答案 0 :(得分:1)

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

UNDIRECTED在这里不是一个好选择,因为它意味着用户和群组之间的关系可以在任何方向,我猜你不想在你的图模型中这样做。 这对于你不关心方向的关系(例如(user1)-[:FRIEND]-(user2))有好处,但不是其他方面。 我会在任一课程中使用OUTGOINGINCOMING,具体取决于用户与群组之间的关系。