SDN(Neo4j) Функция закладок не работает для операций извлечения
После выполнения записи в Neo4j я пытаюсь прочитать ту же запись, используя идентификатор закладки, полученный в конце транзакции записи. Я использую 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 поддерживает Caffeine Cache, в котором хранятся все закладки для каждой транзакции.
- Когда мы используем @UseBookmark, Spring получает доступ к закладке из кэша и устанавливает ее в транзакции READ.
Но, похоже, кеш очищается после каждой транзакции, и я не могу получить доступ к его значению, используя @UseBookmark
когда я читаю. Может ли кто-нибудь дать представление о том, почему это происходит, и я делаю это правильно?
У меня есть еще один вопрос. Если в сеансе OGM установлена закладка, означает ли это, что Neo4j будет использовать закладку при запросе данных? Поскольку я не получил никакой подсказки во время отладки или через журналы, которые говорят, что Neo4j использовал закладку, которую я предоставляю. Благодарю.