Neo4j 无法在两个节点之间创建两个以上的相同关系

Neo4j 无法在两个节点之间创建两个以上的相同关系,neo4j,spring-data-neo4j,Neo4j,Spring Data Neo4j,花了好几天的时间试图弄明白为什么这不起作用。我的模型是Player-[:与团队一起玩]->团队-[:参加比赛]->联盟。这种关系的几个实例如下所示 bob-[:PLAYED_WITH_TEAM]->falcons-[:CONTESTED_IN]->ABC League alice-[:PLAYED_WITH_TEAM]->falcons-[:CONTESTED_IN]->ABC League bob-[:PLAYED_WITH_TEAM]->falcons-[:CO

花了好几天的时间试图弄明白为什么这不起作用。我的模型是
Player-[:与团队一起玩]->团队-[:参加比赛]->联盟
。这种关系的几个实例如下所示

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在两个不同的联盟中为同一支球队效力,因此我需要在同一开始(Bob)和结束(Falcons)节点之间有两个played_和_团队关系

我正在使用spring数据并定义了实体。我能够使用spring数据创建两个这样的关系,但不超过两个。i、 e.如果鲍勃为同一支猎鹰队又打了第三个联赛,我无法建立第三个关系。我不确定问题出在哪里。下面是我创建新关系的代码。PlayedWith是一个
关系实体
,其中
玩家
作为开始节点,
团队
作为结束节点

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;
    }
玩弄

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

    @StartNode
    Player player;

    @Fetch
    @EndNode
    Team team;
}

让我知道是否有另一种存储此场景的方法。

您不需要在bob和falcons之间添加其他关系,而是在falcons和新联盟之间添加以下关系:

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

当鲍勃为猎鹰队效力时,猎鹰队随后在ABC联赛、XYZ联赛和新联赛中竞争,鲍勃在这三个联赛中含蓄地打球

事实上,应该只有一个:鲍勃和猎鹰队之间的团队关系。 你确定你的查询是正确的,可以得到Bob和falcons之间的:与团队关系的数量吗

从SDN参考文档中:

Spring数据Neo4j默认情况下确保只有一个 任意两个给定实体之间给定类型的关系。这个可以 通过将createRelationshipInterween()方法用于 存储库或实体上的allowDuplicates参数


这是我最初的模型,但这种方法有一个缺点。你怎么能找到只参加XYZ联赛的猎鹰队球员?一个球员可能不会参加所有的联赛,那么你需要另外一个球员与联赛的关系。