在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/)所做的书签文档的理解,我的理解是:
但是似乎每次事务后都会清除缓存,并且在读取时无法使用@UseBookmark
访问其值。任何人都可以就为什么会发生这种情况提供一些见解,我是否以正确的方式做呢?
我还有一个问题。如果在OGM会话上设置了书签,是否表示Neo4j在查询数据时将使用书签?因为在调试或通过日志时没有得到任何提示,说Neo4j使用了我提供的书签。谢谢。