【问题标题】:Spring data neo4j: correct way to handle relationships?Spring data neo4j:处理关系的正确方法?
【发布时间】:2016-08-18 14:11:13
【问题描述】:

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

  1. User 具有字段Set<Group> groupsOrganization organization
  2. GroupOrganization 具有字段Set<User> users
  3. 两个选项同时使用(双向关系)

另外,还有与指定方向的关系的注解:

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

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

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

只要我希望能够尽快获得用户组和组内的用户,我就完成了一种同时使用上面列出的两个选项以及将每个关系注释为 @ 的方法987654329@ 因为它看起来像通用方法。它有什么缺点吗?如果是这样,哪种方法会更好?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      相关资源
      最近更新 更多