无法在两个节点之间创建超过2个相同的关系

时间:2013-08-22 23:32:39

标签: neo4j spring-data-neo4j

花了好几天试图弄清楚为什么这不起作用。我的模型是Player-[:PLAYED_WITH_TEAM]->team-[:CONTESTED_IN]->league。这种关系的几个实例如下

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关系。

我正在使用spring数据并定义了实体。我能够使用spring数据创建2个这样的关系,但不能超过2个。也就是说如果鲍勃为另一个第三联赛的同一队猎鹰队效力,我无法建立第三关系。我不确定问题出在哪里。下面是我创建新关系的代码。 PlayedWith为RelationshipEntity,其中Player为起始节点,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;
}

如果存在另一种存储此方案的方法,请告诉我。

2 个答案:

答案 0 :(得分:0)

你不需要在鲍勃和猎鹰之间添加另一种关系,而是在猎鹰和新联盟之间添加这样的关系:

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

由于鲍勃为猎鹰队和猎鹰队效力,然后在ABC联赛,XYZ联赛和新联盟的比赛中有争议,他们在这三个联赛中发挥了作用。

答案 1 :(得分:0)

实际上应该只有一个:鲍勃和猎鹰之间的PLAYED_WITH_TEAM关系。 你确定你的查询是否适合获得Bob和猎鹰之间的PLAYED_WITH_TEAM关系?

来自SDN参考文档:

  

请注意

     

Spring Data Neo4j默认确保只有一个   任何两个给定实体之间给定类型的关系。这个可以   通过使用createRelationshipBetween()方法来规避   存储库或实体上的allowDuplicates参数。