кэширование работает нормально, но мое требование мудрый getAll () конкретный идентификатор не обновляется, пока индивидуальный вызов обновляется - PullRequest
0 голосов
/ 22 мая 2019

У меня есть приложение весенней загрузки с контроллером отдыха.Пользователь - модель

Остальные контроллеры предназначены для getAllNotes (), getNoteById (), updateNoteById ()

@Cacheable(key="'#id'")
@GetMapping("/notes/{id}")
public Note getNoteById(@PathVariable(value = "id") Long noteId)
{
    return noteRepository.findById(noteId).get();
}

@Cacheable()
@GetMapping("/notes")
public List<Note> getAllNotes()
{
    return noteRepository.findAll();
}

@CachePut(key="'#id'")
@PutMapping("/notes/{id}")
public Note updateNoteById(@PathVariable(value = "id") Long noteId, @Valid @RequestBody Note noteDetails)
{
    Note note = noteRepository.findById(noteId).get();          
    ...
    return noteRepository.save(note);
}

Теперь моя проблема заключается в том, что индивидуально, если я получаю его, получается из кеша,И даже после обновления также, если я пытаюсь получить, это согласуется с измененными данными

Но, если я обращаюсь к getAllNotes (), то он получает данные из базы данных в первый раз и в следующий раз из кэша.,Но конкретное поле, которое я обновляю, не обновляется в этом.

шаги, за которыми я следую

getAllNotes () // [{"id": 11, "title": "title11"}, {"id": 12, "title": "title12"}]

getNoteById (11) // {"id": 11, "title": "title11"}

updateNoteById (11, Note note) // note - {"id": 11, "title": "title1111"}

getNoteById (11) // {"id": 11,"title": "title1111"}

getAllNotes () // [{"id": 11, "title": "title11"}, {"id": 12, "title": "title12"}]

// ожидается [{"id": 11, "title": "title1111"}, {"id": 12, "title": "title12"}]

Он не обновляет первые данные, так как я думаю, что он принимает весь вывод getAllNotes () как один объект кеша, а не как комбинацию отдельного кеша (byId) и не сохраняет ссылку на отдельный кеш

Но, веб-сайт , который я видел, может этого добиться

...