问题描述
在使用新的Spring Data Neo4j-RX时,我有一个非常典型的情况,我正在获取一个对象,并希望在生成的对象中获得一个级别的关系。我的东西最初是用OGM针对Neo4j 3.5编写的,在这里工作正常。因为我使用的是Kotlin,所以我想将null作为“不存在”的情况处理,而不是Java Optional。
代码非常简单:
@Query("MATCH (a:Foo {id: \$id})-[r]->(o) RETURN a,r,o")
fun findByIdOrNull(id: String): FooNode?
但这不起作用。直接对驱动程序运行cypher查询似乎返回正确的结构-我们获得了父对象,关系和目标对象。所有ID都匹配,以此类推。但是父对象中的属性保留为空。
如果我使用常规的旧findById()
并处理Optional结果,则效果很好。看来我一定做错了什么,但我不知道那是什么。
解决方法
更新:以下在一般情况下不起作用。它适用于一个特定的案例,但不适用于扩展的案例。
因此,我浏览了DefaultNeo4jConverter代码,并意识到它正在寻找原始结果中的关系列表。在示例中的某个地方看到了TodoListResponse
Cypher函数之后,我的代码看起来像这样:
collect()
它有效。这对我来说不太有意义。似乎没有在文档中提及(例如,在https://neo4j.github.io/sdn-rx/current/#Migrating的迁移指南中)存在明显的向后不兼容。所以,我假设我仍然缺少一些东西。
我要在Neo4j项目上提交一个错误,然后看看他们怎么说。