我有一个带有rest控制器的spring-boot应用程序。 用户是模特
其他控制器分别用于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)//注释-{“ 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)的组合,并且不保留单个缓存的引用
但是,我看到的the website可以实现