neo4j-ogm 中的结果不一致 - 与会话范围有关吗?

Incosistent Results in neo4j-ogm - Related to Session Scope?

我们使用 Spring Data Neo4J 开发 Spring 引导 REST 应用程序。最近我们升级到 Spring Data Neo4j 4.2 以及 ogm 2.1.1 并使用嵌入式驱动程序。

在我们的应用程序中,我们提供了一些 GET 操作,在这些操作中,我们从从 Neo4j 获取的节点构建一些对象结构。

一旦我们并行处理多个请求,我们就会面临不一致的结果,即我们的对象结构在每个请求上都有不同的大小。

我们不确定这种不一致行为的原因 - 但可能与 OGM 中的会话处理有关?我们知道 Session 不是线程安全的,但我们不知道如何在 SD 4.2 中处理这个问题。 4.2之前我们在定义session bean的时候把session作用域改成了prototype,但是在SD 4.2

配置变了

4.2之前的配置

@Bean
@Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
    return;
}

我们可以将问题的根源缩小到我们通过存储库从 Neo4j 加载元素的地方 class:

repository.findOne(id,-1);

如果我们将此调用放在同步块中,则不会发生不一致。

synchronized (this) {
    repository.findOne(id,-1);
}

我们可能遗漏了一些使用 SD 4.2/ogm 的重要信息,但在文档和网络上找不到任何有用的信息。 还是possible/necessary改SD 4.2的session scope?

这是 OGM 中的错误。参见:https://jira.spring.io/browse/DATAGRAPH-951

我们希望在下一版本 (OGM 2.1.2) 中对此进行修复。