【发布时间】:2019-06-12 06:07:13
【问题描述】:
我是 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);
....
}
希望结果被一级缓存缓存,不会重复查询数据库。
我做错了什么?
【问题讨论】:
-
一级缓存与其会话相关联。例如,如果您在会话中工作并且您两次点击相同的查询,则将从一级缓存中检索数据,但是当会话关闭时,缓存的数据将消失。
-
请提供调用此方法的代码。是否在同一事务中第二次调用该方法?
-
@JaspreetJolly 是的,它在同一个事务中。
-
据我了解,一级缓存是默认缓存,没有机制可以禁用它。所以,唯一的问题应该是调用是在 2 个不同的会话中进行的。
标签: java hibernate jpa spring-data-jpa first-level-cache