我们有一个学生实体,并已实现缓存。我们仅在数据库中找不到记录时执行插入记录。
第一次运行良好,因为数据库中不存在记录。但是,第二次,如果我们重新提交相同的请求,则它将从缓存中获取学生实体并返回null。 (在DB中,它存在),因此尝试重新插入该数据,但由于唯一的约束而失败。
在这种情况下,有人可以帮忙如何清除/更新缓存。
存储库代码段:
@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);
}
答案 0 :(得分:0)
您可以使用unless
指定如果结果为null,则不缓存结果,但不适用于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){
}
}