这个Hibernate配置表面上应该控制在第一级缓存中缓存多少个对象.原因很容易理解,我们不想耗尽内存.
但有些事让我感到困惑.我见过的每个实现,包括这个网站 都有明确的同花顺和清晰.没问题,但那么配置属性有什么意义呢?
注意:我在这里假设Hibernate以某种方式监视缓存的大小,如果某种类型的对象数量增长到大于缓存大小,则将缓存与db同步.不知道那个假设是不是错了???
在NHibernate使用Load或Get方法时,您可以轻松地从第一级缓存中受益.可是你知道ICriteria,HQL,Linq-to-NHibernate和QueryOver?他们也使用一级缓存吗?
EntityManager维护检索到的对象的一级缓存,但是,如果您希望拥有线程安全的应用程序,则需要为每个事务创建并关闭EntityManager。
那么,如果为每个事务创建并关闭了那些实体,那么1级缓存的意义何在?或者,如果您在单线程中工作,那么entityManager缓存可用吗?
第一级缓存是否与hibernate中的查询缓存不同?我看过有关第一级和查询缓存的文章,所以我很困惑.
我是 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)
我希望结果被一级缓存缓存,数据库不会被重复查询。
我究竟做错了什么?