0

我正在使用 SDN4,并面临在添加新的不同关系时删除以前关系的问题。这是我的场景,

步骤 1 使用关系实体创建具有一些关系的节点。保存关系实体。

步骤 2 使用 Spring Repository 和 Cypher 基于某些属性获取节点并添加新的不同关系。这是我的获取 API:

@Component("productRepository")
public interface ProductRepository extends GraphRepository<Product>{
   @Query("MATCH (c:Product {uuid:{0}}) RETURN c")
   Product findByUuid(String uuid);
}

保存关系实体

这样做之后,步骤 1 中添加的关系将丢失,但步骤 2 中的关系仍然存在。

在进行一些调试时,我可以看到使用 Cypher 和 Spring Repository 获取返回的节点实体对于关系实体具有空值。

注意:如果我不执行第 2 步,则第 1 步中的关系会正确反映。

有人可以告诉我如果我遗漏了什么或者这是一个问题。我没有看到在这种情况下指定深度的方法,除非这是在密码中的某个地方。

4

3 回答 3

2

不支持 @Query 上的 depth 参数。此时您的选择是 -

一个。要使用存储库 findOne(id,depth) 或 Neo4jTemplate.load(type,id,depth) 将 @Query 返回的产品重新加载到您需要的深度

湾。如果您可以将 @Query 转换为一组 org.neo4j.ogm.cypher.Filter ,那么您可以使用接受过滤器和深度的 Session.loadAll 方法。MusicIntegrationTest包含几个过滤器示例。

于 2015-09-09T16:16:35.157 回答
0

对于其他人的参考,我按照@Luanne 的建议遵循了选项 b。

这是代码片段

def getByUuid[T](klazz: Class[T], uuid: String): T = {
    IterableUtils.getSingleOrNull(session.loadAll(klazz, new Filter("uuid", uuid), 1))
}
于 2015-09-10T11:19:04.390 回答
0

我知道它永远不会从最后一个答案开始,但有人可能也会在这个问题上遇到麻烦..

我猜 ogm 通过更新它已经涵盖了这个异常。因为 prev。关系不再删除。(用ogm 2.0.5neo4j 3.0.7测试。)

附言。1 深度的查询可以减少你的执行时间真的很糟糕。所以除非有必要,否则不要再使用它了。

于 2016-12-15T13:18:56.870 回答