如何解决 Spring data neo4j 4 在添加新关系时删除以前的关系的问题?

How to fix issue of Spring data neo4j 4 deleting previous relationships when adding new ones?

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

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

第 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 存储库的提取返回的节点实体具有关系实体的空值。

注意:如果我不做第2步,那么第1步中的关系就会正确反映出来。

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

不支持@Query 的深度参数。 此时您的选项是 -

一个。要使用存储库 findOne(id,depth) 或 Neo4jTemplate.load(type,id,depth)

将 @Query 返回的产品重新加载到您需要的深度

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

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

这里是代码片段

def getByUuid[T](klazz: Class[T], uuid: String): T = {
    IterableUtils.getSingleOrNull(session.loadAll(klazz, new Filter("uuid", uuid), 1))
}

我知道从上一个答案开始就一直如此,但有人可能也遇到了这个问题..

我猜 ogm 已经通过更新 it.Because prev 覆盖了这个异常。 relationships 不再删除。(使用 ogm 2.0.5 & neo4j 3.0.7 测试。)

ps。深度为 1 的查询可以非常糟糕地减少执行时间。所以除非必要,否则不要再使用它了。