Spring Data JPA存储库在Save()之后刷新缓存

时间:2019-01-01 10:28:59

标签: spring caching spring-data-jpa

我们有一个学生实体,并已实现缓存。我们仅在数据库中找不到记录时执行插入记录。

第一次运行良好,因为数据库中不存在记录。但是,第二次,如果我们重新提交相同的请求,则它将从缓存中获取学生实体并返回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);
}

1 个答案:

答案 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){

    }
}