【发布时间】:2014-06-16 15:12:46
【问题描述】:
我有一个存储库方法:
@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 检查了它们的存在):
Transaction tx = neoTemplate.getGraphDatabaseService().beginTx();
Node otherNodeToLink = others.get(new Random().nextInt(others.size()-1));
//System.out.println("Linking "+root.getProperty("id").toString()+" And "+otherNodeToLink.getProperty("id").toString());
storyService.linkSimilarStory(root.getProperty("id").toString(), otherNodeToLink.getProperty("id").toString());
tx.close();
我收到了带有他们 ID 的消息 Entities linked successfully。
当我使用 neo4j 控制台检查时,没有创建任何关系!
直接在控制台中运行相同的查询,它会创建关系。
不明白为什么它不适用于 Spring 数据:(
编辑:
我也试过这样做:
Relationship rel = template.getNode(original.getNodeId()).createRelationshipTo(template.getNode(newEntity.getNodeId()), isSimilar);
System.out.println("Rel: "+rel.getType());
它显示 Rel:RelationshipTypeToken[name:SIMILAR,id:7],但一直没有在 DB 中创建关系!
【问题讨论】:
-
“Entity”和“Story”在你的 POJO 和图表本身之间是否应该是同一类型?
-
对不起,是的。这是我为将代码放在一般情况下所做的修改。我编辑了用实体替换故事的帖子
-
好的。当你在那个“else”块中调用它时,“connectSimilar”的返回值是多少?
-
总是假的,因为他无法添加relashionship
-
好的,您的帖子中没有明确/指定,因为您说您收到“实体链接成功”消息。感谢您的澄清。