SDN(Neo4j)书签功能不适用于提取操作

时间:2018-06-20 13:11:26

标签: neo4j cypher spring-data-neo4j neo4j-ogm neo4j-driver

在Neo4j中执行写操作后,我试图使用在写事务结束时收到的书签ID读取相同的记录。我正在使用SDN来查询书签。我已经做了以下更改:

配置书签管理器

    @Configuration
    @EnableBookmarkManagement
    public class SampleConfig implements WebMvcConfigurer {

      @Bean
      public Neo4jTransactionManager transactionManager() {
        return new Neo4jTransactionManager(sessionFactory());
      }

      @Bean
      public BookmarkManager bookmarkManager() {
        return new CaffeineBookmarkManager();
      }
}

在事务上下文中访问书签

    @Service("xyzService")
    public class XYZServiceImpl implements XYZService {

       @Override
       @Transactional(readOnly = true)
       @UseBookmark
       @Retryable(exceptionExpression = RETRY_EXCEPTION_PATTERN, maxAttempts = 
       RETRY_MAX_ATTEMPTS, backoff = @Backoff(delay = 
       RETRY_BACKOFF_INITIAL_DELAY, multiplier = RETRY_BACKOFF_MULTIPLIER))
       public XYZ findById(String id) {
          return neo4jSession.query(XYZ.class, "some cypher query", new HashMap<>());
    }
}

根据我对(https://neo4j.com/blog/spring-data-neo4j-5-0-release/)所做的书签文档的理解,我的理解是:

  • SDN维护一个咖啡因缓存,该缓存存储每个事务的所有书签。
  • 当我们使用@UseBookmark时,Spring从缓存中访问书签并将其设置为READ事务。

但是似乎每次事务后都会清除缓存,并且在读取时无法使用@UseBookmark访问其值。任何人都可以就为什么会发生这种情况提供一些见解,我是否以正确的方式做呢?

我还有一个问题。如果在OGM会话上设置了书签,是否表示Neo4j在查询数据时将使用书签?因为在调试或通过日志时没有得到任何提示,说Neo4j使用了我提供的书签。谢谢。

0 个答案:

没有答案