当前位置: 首页 > 知识库问答 >
问题:

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

於英朗
2023-03-14

花了好几天的时间试图弄明白为什么这不起作用。我的模型是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)节点之间有两个与_团队关系的球员。

我使用的是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;
}

请告诉我是否有其他存储此场景的方法。


共有2个答案

司空繁
2023-03-14

事实上,应该只有一个:鲍勃和猎鹰之间的团队关系。你确定你的查询是正确的吗:鲍勃和猎鹰之间的团队关系?

来自SDN参考留档:

笔记

Spring Data Neo4j默认情况下确保任意两个给定实体之间只有一个给定类型的关系。通过对存储库或实体使用带有allowDuplicates参数的createRelationshipInterween()方法,可以避免这种情况。

柏正平
2023-03-14

你不需要在鲍勃和猎鹰队之间添加另一种关系,但猎鹰队和新联盟之间的关系如下:

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

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

 类似资料:
  • 我需要在所有具有相同属性值的节点之间创建关系。 例如,我可以使用以下查询: 但是如果我有大约200K的节点,这个脚本运行的时间相当长。 有没有其他更快的方法来建立这样的关系? 谢谢

  • 我正在创建一个简单的社交图,用户可以在其中创建一个帖子,标记它,并对它进行评论。我用py2neo做模型。该模型具有和作为节点。用户在上、或。在我的例子中,单个用户可以在单个上创建多个或(就像其他任何社交网络一样)。根据我的模型,这需要多个或关系,但具有不同的属性。模型是这样建立的: 我运行以下操作来构建图形: 我希望有两个关系,如下所示: 但我看到事实并非如此: 那么,我的问题是双重的。(1)可以

  • 我现在的解决办法是先保存所有的ArchitectureUnitState节点,从数据库中再次检索它们,将一个节点映射到另一个节点,然后再次保存它。这样,可以创建关系,但我需要保存两次。

  • 问题内容: 我正在使用networkx处理图。我有一个很大的图(其中有近200个节点),我尝试查找两个节点之间的所有可能路径。但是,据我了解,networkx只能找到最短的路径。如何不仅获得最短路径,还获得所有可能路径? UPD:路径只能包含每个节点一次。 UPD2:我需要类似find_all_paths()函数的功能,在此进行描述:python.org/doc/essays/graphs.htm

  • 我正在寻找一种方法来声明“2个依赖项之间的依赖项”。 例如,在我的模块中,我ivy.xml以下行: 我的问题是,日志经典 1.0.13 依赖于 slf4j-api 1.7.5,而我的模块依赖于 1.6.6(slf4japiversion 的值)。 我无法更改 slf4japiversion,但将来它可以由其他人升级。 有没有办法声明对logback的依赖关系,以检索与我的slf4j api版本兼容

  • 使用cypher和neo4j 2.0。 给定两组节点ID(长度相等)和一组权重,我想在相应的节点之间创建一个关系,并将权重设置为属性。例如,如果我有以下三个列表: 我想创建以下表示形式 但不是,例如 我可以通过迭代我的参数,然后创建单独的查询来实现这一点。有没有一种方法来批量运行它,将我的lsits作为参数传递,并要求按顺序匹配节点和属性? 我曾一度认为以以下方式使用参数会起作用,但它会创建关系的