2013-08-22 82 views
0

花了多天的時間試圖找出爲什麼這不起作用。我的模特是Player-[:PLAYED_WITH_TEAM]->team-[:CONTESTED_IN]->league。這種關係的幾個例子如下:無法在兩個節點之間創建超過2個相同的關係

bob-[:PLAYED_WITH_TEAM]->falcons-[:CONTESTED_IN]->ABC League 
alice-[:PLAYED_WITH_TEAM]->falcons-[:CONTESTED_IN]->ABC League 
bob-[:PLAYED_WITH_TEAM]->falcons-[:CONTESTED_IN]->XYZLeague 

鮑勃在兩個聯賽ABC和XYZ效力於同一支球隊「獵鷹」。這是我想要捕捉的事實。由於Bob在2個不同的聯賽中爲同一個球隊效力,我需要在同一起始(Bob)和結束(Falcons)節點之間有兩個PLAYED_WITH_TEAM關係。

我使用彈簧數據並定義了實體。我能夠使用彈簧數據創建2個這樣的關係但不超過兩個。即如果鮑勃在同一隊獵鷹隊爲另一個第三聯賽效力,我無法創造第三關係。我不確定問題出在哪裏。以下是我創建新關係的代碼。 PlayedWith是RelationshipEntityPlayer作爲起始節點,Team作爲終止節點。

private PlayedWith createPlayedWithRelation(League currentLeague, Team team, Player p) 
    { 
     System.err.println("Creating PLAYED_WITH_TEAM relation between " + team + " and " + p + " and " + currentLeague); 

     PlayedWith playedWith = template.createRelationshipBetween(p, team, PlayedWith.class, "PLAYED_WITH_TEAM", true); 
     playedWith.setDuring(currentLeague.getStartDate()); 
     playedWith.setInLeague(currentLeague); 
     playedWith.setPlayer(p); 
     playedWith.setTeam(team); 
     playedWith.setAsCaptain(p.isCaptain()); 

     team.addPlayer(p); 
     template.save(playedWith); 

     return playedWith; 
    } 

PlayedWith

@RelationshipEntity (type = "PLAYED_WITH_TEAM") 
public class PlayedWith 
{ 
    @GraphId 
    private Long nodeId; 

    @StartNode 
    Player player; 

    @Fetch 
    @EndNode 
    Team team; 
} 

讓我知道是否有存儲這種情況下的替代方法。

回答

0

你不需要鮑勃和獵鷹之間,但獵鷹與新聯賽之間增加相互之間的關係是這樣的:

(falcons)-[:CONTESTED_IN]->(NEWLeague) 

鮑勃效力於獵鷹和隼則在ABC聯賽爭奪, XYZ聯盟和新聯盟鮑勃暗中在這三個聯賽中打球。

+0

這是我的初始模型,但這種方法有一個缺點。你怎麼能找到只玩過XYZ聯盟的獵鷹隊員?玩家可能不會玩所有的聯賽。 –

+0

然後你需要從球員到聯盟的其他關係。 – h3nrik

0

其實應該只有一個:PLAYED_WITH_TEAM bob和獵鷹之間的關係。 你確定你的查詢是正確的:獲得鮑勃和獵鷹之間PLAYED_WITH_TEAM關係的數量?

從SDN參考文檔:

春數據的Neo4j確保在默認情況下只存在一個 任何給定的兩個實體之間的給定類型的關係。通過使用createRelationshipBetween()方法和 存儲庫或實體上的allowDuplicates參數,可以規避 。

相關問題