Репозиторий Spring Data JPA для обновления кеша после Save () - PullRequest
0 голосов
/ 01 января 2019

У нас есть Студенческая организация и внедрен кеш.Мы выполняем вставку записи только тогда, когда запись не найдена в базе данных.

С первого раза все работает нормально, так как запись в БД отсутствует.Но во второй раз, если мы повторно отправим тот же запрос, он извлекает сущность студента из кэша и возвращает ноль.(В БД он существует) и, следовательно, попытаться повторно вставить эти данные и завершится неудачно с уникальным ограничением.

Может кто-то помочь, как очистить / обновить кэш в этом случае.

Фрагмент кода репозитория:

@Repository
public interface StudentRepository extends JpaRepository<Student, Long> {

    @Cacheable(cacheNames="StudentCache", cacheManager="DepartmentCacheManager", sync=true)
    Student findByStudentId(String StudentId);
}

Фрагмент кода сервиса

Student student = studentRepository.findByStudentId(studentId);
if (student == null) {
    student= createStudentObject(studentId);
    studentRepository.save(student);
}

1 Ответ

0 голосов
/ 01 января 2019

Вы можете использовать unless для указания не кэшировать результат, если он нулевой, но он не работает с sync = true

@Repository
public interface StudentRepository extends JpaRepository<Student, Long> {

    @Cacheable(cacheNames="StudentCache", cacheManager="DepartmentCacheManager", unless="#result == null")
    Student findByStudentId(String StudentId);
}

Если вы должны использовать sync, вы можете использовать @CachePut для обновления кэша после сохранения учащегося.

public class StudentRepository{

    @CachePut(cacheNames="StudentCache", cacheManager="DepartmentCacheManager",key="#student.studentId")
    public Student save(Student student){

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...