У меня есть этот тест:
@Test
public void testCacheLineOfCredit() throws Exception {
LineOfCreditInfo created = repository.save(this.getInfo());
assertThat(created, is(notNullValue()));
//First fetch read from DB
LineOfCreditInfo firstSearch = service.fetch(created.getId());
System.out.println("Created ID: " + created.getId() + " Date: " + created.getStartDate().toString());
System.out.println("First ID: " + firstSearch.getId() + " Date: " + firstSearch.getStartDate().toString());
assertEquals(created.getStartDate(), firstSearch.getStartDate());
Thread.sleep(100);
LineOfCreditInfo updated = this.getInfo();
updated.setId(created.getId());
updated.setAgreement(created.getAgreement());
repository.save(updated);
//Second fetch read from cache
LineOfCreditInfo secondSearch = service.fetch(created.getId());
System.out.println("---------------------------------------");
System.out.println("Updated ID: " + created.getId() + " Date: " + created.getStartDate().toString());
System.out.println("Second ID: " + secondSearch.getId() + " Date: " + secondSearch.getStartDate().toString());
}
Ну, вывод System.out таков:
Object read from database
Created ID: c7e635c6-6024-4149-9f92-74316c149800 Date: 2020-02-25T16:22:01.181+01:00[Europe/Berlin]
First ID: c7e635c6-6024-4149-9f92-74316c149800 Date: 2020-02-25T16:22:01.181+01:00[Europe/Berlin]
---------------------------------------
Updated ID: c7e635c6-6024-4149-9f92-74316c149800 Date: 2020-02-25T16:22:01.464+01:00[Europe/Berlin]
Second ID: c7e635c6-6024-4149-9f92-74316c149800 Date: 2020-02-25T16:22:01.464+01:00[Europe/Berlin]
Как возможно, что вторая Дата Id равна на обновленном объект, если это читается из кеша?
В сервисе есть system.out, который записывает только в первую выборку, правильно.
Это метод сервиса:
@Cacheable(value = "lineOfCredits")
public LineOfCreditInfo fetch(String id) throws ContextOutOfDomainException {
InvoiceFinancingContext context = contextFactory.getObject();
log.info(String.format("Object read from database: Id[%s]", id));
Optional<LineOfCreditInfo> lineOfCreditInfo = repository.findByIdAndDomainId(id, context.getDomainId());
System.out.println("Object read from database");
return lineOfCreditInfo.get();
}