Я изучаю кеширование весенней загрузки, чтобы применить эту концепцию в проекте нашей организации, и я сделал образец проекта под названием «Кэш сотрудников». У меня есть четыре метода в моем контроллере и компоненте службы insert, update, get и getAll.For insert and get @Cacheable
работает отлично. Теперь я звоню getAllEmployee()
в первый раз, тогда он получает данные из базы данных. После этого я пытаюсь обновить с помощью @CachePut
, он обновляет значение в базе данных, и снова я вызываю getAllEmployee()
, тогда он не возвращает обновленное значение из кеша. Я также ссылаюсь на документацию для @CachePut
. Я также ссылаюсь на некоторые другие документы, такие как this и this , но я не решил свою проблему. Кроме того, когда я звоню, ошибка не возникает.
То, что я пробовал, это
Это два моих API из EmplyeeController.java
@PostMapping(value = "/updateSalary")
private Boolean updateSalary(@RequestParam int salary, @RequestParam Integer id) {
return empService.updateSalary(salary, id);
}
@GetMapping(value = "/getAllEmployee")
private Object getAllEmployee() {
List<EmployeeMapping> empList = empService.getAllEmployee();
return !empList.isEmpty() ? empList : "Something went wrong";
}
Это два моих метода из EmployeeService.java
. Я применил разные ключи для обновления метода, но не сработало. Мой метод getAll()
не имеет параметров, поэтому я попробовал все методы ключей для методов без параметров из здесь , тогда я также не получил никаких результатов.
@CachePut(key = "#root.method.name")
public Boolean updateSalary(int salary, int id) {
System.err.println("updateSalary method is calling in service");
if (empRepo.salary(salary, id) != 0) {
return true;
}
return false;
}
@Cacheable(key = "#root.method.name")
public List<EmployeeMapping> getAllEmployee() {
return empRepo.findAllEmployee();
}
Это мои два методы из EmployeeRepository.java
. Я использовал @SqlResultSetMappings
и @NamedNativeQueries
в EmployeeMetaModel.java
с EmployeeMapping.java
, но в нативном запросе EmployeeMetaModel.java
нет ошибок, потому что он дает результат из базы данных.
@Transactional
@Modifying
@Query("update employee_cache e set e.salary = ?1 where e.id = ?2")
int salary(int salary, int id);
@Query(name = "EmployeeListQuery", nativeQuery = true)
List<EmployeeMapping> findAllEmployee();
Пожалуйста, помогите мне получить избавиться от этого мне просто нужно обновленное значение из кеша, используя getAllEmployee()
после вызова updateSalary()
.