2016-08-18 57 views
0

我有User實體;用戶可以是多個組的成員並且是一個組織的成員。有幾個選項來處理這樣的關係:Spring數據neo4j:處理關係的正確方法?

  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

只要我希望能夠得到的組內的用戶和用戶組一樣快,我可以,我完成了使用在上面列出兩個選項的方法同時以及註釋每個關係爲UNDIRECTED,因爲它看起來像通用方法。它有什麼缺點嗎?如果是這樣,哪種方法會更好?

回答

1

由於您想要爲用戶和組中的用戶檢索組,因此您可以像在#1和#2中描述的那樣設置對象模型。

UNDIRECTED在這裏不是一個好的選擇,因爲它意味着用戶和組之間的關係可以在任何方向,我猜你不想在你的圖模型中使用它。 對於不關心方向的人際關係(如(user1)-[:FRIEND]-(user2))而言,這種方式非常有用,但不是其他方式。 根據用戶和組之間的關係,我會在兩個類中使用OUTGOINGINCOMING