Я новичок в Quarkus и, похоже, у меня проблема с кэшированием hibernate в модульном тесте. В тест вводится «UserTransaction». Тест должен проверить задачу очистки базы данных.
Вот что мне нужно сделать:
- создать объект
- начать транзакцию
- сохранить объект с шаблоном «Активная запись» с 'persistAndFlu sh'
- зафиксировать транзакцию
- попытаться получить объект из базы данных через 'find (id)', чтобы убедиться, что он был сохранен
- run задача очистки (сущность удаляется из БД)
- попытаться снова извлечь сущность из базы данных через 'find (id)', чтобы убедиться, что она была удалена
Document doc;
UUID uuid;
doc = new Document();
uuid = UUID.randomUUID();
doc.uuid = uuid;
doc.doc = new byte[0];
doc.createdAt = Instant.now();
transaction.begin();
doc.persistAndFlush();
transaction.commit();
doc = Document.findById(uuid);
Assertions.assertNotNull(doc);
TimeUnit.SECONDS.sleep(Long.parseLong(maxAge)+1);
scheduler.cleanUp();
doc = Document.findById(uuid);
Assertions.assertNull(doc);
Шаг 7 завершается неудачно, потому что 'find (id)' возвращает сущность, хотя ее больше нет в БД.
ЭТОГО НЕ произойдет, если я пропущу шаг 5! Так что, похоже, это проблема с кешированием.
Я пытался внедрить 'Session', 'SessionFactory' и 'EntitiyManager', чтобы получить доступ к текущему Hibernate Session, но ни одного, если это удалось.
Может быть, во всем подходе не хватает того, чего я не получил? Как сделать так, чтобы мир сущностей соответствовал базе данных в настройке, подобной моей?
Любые советы и идеи приветствуются.
TIA