java - Hibernate 一级缓存丢失
问题描述
我是 JPA/Hibernate 一级缓存的新手。
我有以下存储库类
每次我调用 findByState 方法(在同一个事务中),我看到休眠 sql 查询被输出到控制台
public interface PersonRepository extends JpaRepository<PersonEntity, id> {
@Query("select person from PersonEntity p where name= (?1)")
List<PersonEntity> findByState(String state);
....
}
我希望结果被一级缓存缓存,不会重复查询数据库。
我究竟做错了什么?
解决方案
对缓存经常存在误解。
Hibernate 默认不缓存查询和查询结果。唯一使用一级缓存的是,当您调用时,EntityManger.find()
您不会看到 SQL 查询正在执行。如果实体已经在加载,缓存用于避免创建对象。
您要查找的内容称为“查询缓存”。
这可以通过设置启用hibernate.cache.use_query_cache=true
请在官方文档中阅读有关此主题的更多信息: