Spring数据Neo4j没有建立关系

Spring数据Neo4j没有建立关系,neo4j,spring-data-neo4j,Neo4j,Spring Data Neo4j,我有一个存储库方法: @Query("MATCH (original:Entity{id:{0}}),(n:Entity{id:{1}}) "+ "CREATE (original)-[r:SIMILAR]->(n) "+ "RETURN original ") public Entity connectSimilar(String original, String new); 我正在使用它连接此服务方法中的实体: @Transactional

我有一个存储库方法:

@Query("MATCH (original:Entity{id:{0}}),(n:Entity{id:{1}}) "+ 
        "CREATE (original)-[r:SIMILAR]->(n) "+  
        "RETURN original ")
public Entity connectSimilar(String original, String new);
我正在使用它连接此服务方法中的实体:

@Transactional
    public Entity linkSimilarStory(String linkedTo, String linked) {
        System.out.println(linkedTo+" and "+linked);

        Entity original = this.findById(linkedTo);
        Entity newEntity = this.findById(linked);

        if(original != null && newEntity != null){

            if(this.checkIfSimilar(original.getNodeId(), newEntity.getNodeId())){
                System.out.println(original.getNodeId()+" and "+newEntity.getNodeId()+" are already Linked !!");
            }else{
                original = repository.connectSimilar(original.getId(), newEntity.getId());
                System.out.print("Entities linked successfully : "+original.getId()+" with "+newEntity.getId());
            }
            System.out.println(this.checkIfSimilar(original.getNodeId(), newEntity.getNodeId()));

        }
        return original;
    }
当我从一个控制器运行服务方法来链接2个存在的节点时(我用println检查了它们的存在):

我收到消息
实体成功链接了它们的ID

当我使用neo4j控制台进行检查时,没有创建任何关系

直接在控制台中运行相同的查询,将创建关系

无法理解为什么它不能处理Spring数据:(

编辑:

我也尝试过这样做:

Relationship rel = template.getNode(original.getNodeId()).createRelationshipTo(template.getNode(newEntity.getNodeId()), isSimilar);
System.out.println("Rel: "+rel.getType());
它显示Rel:RelationshipTypeToken[name:similor,id:7],但不在DB中创建关系!

您尝试过:

@Query("START original={0}, n={1} "+ 
    "CREATE (original)-[r:SIMILAR]->(n) "+  
    "RETURN original ")
public Entity connectSimilar(Entity original, Entity new);
…因为您已经加载了实体POJO。然后传入代码中的“原始”和“新实体”POJO。您不需要再次查找它们


让我们知道这是否有效(我没有在SDN项目中尝试过这一点,但是,查询看起来差不多正确;根据需要进行调整)。

是“实体”和“故事”你的POJO和图形本身应该是同一类型的吗?对不起,是的。这是我为了把代码放在一般情况下所做的修改。我编辑了文章,用EntityOk替换了故事。当你在“else”中调用“ConnectSimular”时,“ConnectSimular”的返回值是多少block?它总是错误的,因为他无法添加relashionshipOk,因为你说你收到了“Entities linked successfully”消息,所以在你的帖子中没有明确/指定。感谢你的澄清。我尝试了这个@Query(“START original=node({0}),n=node({1})”+“CREATE(original)-[r:Simular]>(n)”+“RETURN original”)public Entity ConnectSimular(Entity original,Entity newEntity);我有相同的结果,您如何调用ConnectSimular?您确定要将有效/正确的对象传递到方法中吗?请查看public“Entity LinkSimular”在原始帖子中。是的,我传递的对象是有效的,因为我在调用linkSimilarI之后才打印它们。在原始帖子中,它仍然让您传递ID属性字符串。我只是想确保您进行了适当的修改。不能太小心。老实说,我从未尝试过使用“创建”@Query注释repo中的语句。哦,是的,我传递的是对象,而不是ID
@Query("START original={0}, n={1} "+ 
    "CREATE (original)-[r:SIMILAR]->(n) "+  
    "RETURN original ")
public Entity connectSimilar(Entity original, Entity new);