Hibernate 一级缓存丢失

Nav*_*avs 1 java hibernate jpa first-level-cache spring-data-jpa

我是 JPA/Hibernate 一级缓存的新手。

我有以下存储库类

每次我调用 findByState 方法时(在同一个事务中),我都会看到 hibernate sql 查询被输出到控制台

public interface PersonRepository extends JpaRepository<PersonEntity, id> {

    @Query("select person from PersonEntity p where name= (?1)")
    List<PersonEntity> findByState(String state);
    ....
}
Run Code Online (Sandbox Code Playgroud)

我希望结果被一级缓存缓存,数据库不会被重复查询。

我究竟做错了什么?

Sim*_*lli 5

人们常常对缓存存在误解。

Hibernate 默认不缓存查询和查询结果。第一级缓存唯一使用的是当您调用时,EntityManger.find()您将看不到正在执行的 SQL 查询。如果实体已经在加载,缓存用于避免创建对象。

您正在寻找的内容称为“查询缓存”。

这可以通过设置启用 hibernate.cache.use_query_cache=true

请在官方文档中阅读有关此主题的更多信息:

https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#caching-query