1. get/load区别
如果记录存在,get返回对象(或代理对象);否则返回null。
如果记录存在,load返回对象;否则返回 NotObjectFoundException
2.hibernate Cache
2.1 一级缓存,在当前session内
2.2 Query Cache
Cache queries and results.
方法:
1. 在hiberante Configuration 文件中:
<property name="hibernate.cache.use_query_cache">true</property>
2. 查询时
Query query = session.createQuery("from Person p where p.id=1");
query.setCacheable(true);
2.3 二级缓存, 跨session . 如EHCache
3. load 与 CreateQuery 在处理Cache的区别
首先,load时在一个session中,一级缓存总是有效的。比如下面的只issue sql操作一次
Session session = getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Person person1 = (Person) session.load(Person.class, 1L);
System.out.println(person1.getFirstName());
Person person2 = (Person) session.load(Person.class, 1L);
System.out.println(person2.getFirstName());
tx.commit();
session.close();
其次,如果用CreateQuery有点不同,比若下面的需要issue sql操作两次
Session session = getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Query query = session.createQuery("from Person p where p.id=1");
Iterator it = query.list().iterator();
while (it.hasNext ()){
Person p = (Person) it.next();
System.out.println(p.getFirstName());
}
query = session.createQuery("from Person p where p.id=1");
it = query.list().iterator();
while (it.hasNext ()){
Person p = (Person) it.next();
System.out.println(p.getFirstName());
}
tx.commit();
session.close();
原因是session cache时是根据key(load方法中传入的ID)来缓存的。解决的方法是:
1. 用load,如上面的代码
2. 用查询缓存,如上面的介绍
Session session = getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Query query = session.createQuery("from Person p where p.id=1");
query.setCacheable(true);
Iterator it = query.list().iterator();
while (it.hasNext ()){
Person p = (Person) it.next();
System.out.println(p.getFirstName());
}
query = session.createQuery("from Person p where p.id=1");
query.setCacheable(true);
it = query.list().iterator();
while (it.hasNext ()){
Person p = (Person) it.next();
System.out.println(p.getFirstName());
}
tx.commit();
session.close();
分享到:
相关推荐
- **配置**:通过 `hibernate.cache.use_second_level_cache` 配置启用,然后选择合适的提供者。 - **分区**:缓存数据可以按类或特定查询进行分区,以便更高效地管理。 - **过期策略**:可通过设置缓存的生存时间或...
2. 绑定 Hibernate 二级缓存:Spring Cache 可以与 Hibernate 二级缓存集成,通过配置让 Spring 的缓存操作直接作用于 Hibernate 的二级缓存。 3. 缓存策略:根据业务需求,调整缓存的过期时间、更新策略等,确保...
本篇文章将深入探讨“hibernate_cache_level_1”这一主题,即Hibernate的二级缓存,以及在项目中的应用。 一级缓存是Hibernate内置的Session级别的缓存,它是事务性的,每个Session都有自己的缓存,当Session关闭时...
3. **设置缓存模式**:在查询时,可以设置`CacheMode.REFRESH`,强制Hibernate在执行查询前刷新查询缓存区域,从而获取最新的数据。这是一种更高效的替代`SessionFactory.evictQueries()`的方法,专门用于处理底层...
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory 3.3配置如下: <property name="hibernate.cache.use_second_level_cache">true <property name="cache...
在这个特定的情况下,错误信息 "NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider" 指示的是 `org.hibernate.cache.CacheProvider` 类无法被找到。 `org.hibernate.cache.CacheProvider` 是Hibernate框架...
标题中的“启动tomcat报错org.hibernate.cache.CacheProvider”指的是在尝试启动Apache Tomcat服务器时遇到了与Hibernate缓存提供者相关的错误。这通常涉及到Hibernate框架的配置或运行时环境问题。Hibernate是一个...
### Hibernate与Jboss Cache结合实现二级缓存机制 #### 概览 在现代的企业级应用开发中,提高数据访问效率是提升系统性能的关键之一。Hibernate作为一款流行的Java持久层框架,通过提供对象关系映射(ORM)技术...
4. 性能优化:讨论如何通过缓存机制(如Spring的HibernateCache)和数据库连接池来提高系统的性能。 5. 安全性:简述如何集成Spring Security,为网络书城应用添加用户认证和授权功能。 总的来说,这个课程会带领...
其中,`hibernate.cache.provider_class`指定了使用Ehcache作为缓存提供者,`hibernate.cache.provider_configuration_file_resource_path`指定了Ehcache的配置文件路径,`hibernate.show_sql`则控制是否显示SQL日志...
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory <property name="hibernate.cache.use_second_level_cache">true ``` 接下来,为特定的实体类或者查询...
### Hibernate的Cache缓存解析 #### 基本的缓存原理 在深入探讨Hibernate缓存之前,我们先来了解一下缓存的基本原理。缓存是一种用于提高数据访问速度的技术,通常用于存储最近或频繁访问的数据副本。通过将这些...
本压缩包“hibernate_cache_level_2.rar”聚焦于Hibernate框架中的第二级缓存,这是一个关键特性,用于提高应用程序的性能。在这个主题下,我们将深入探讨Hibernate的二级缓存机制、其工作原理以及如何在项目中有效...
解决目前memcached不支持hibernate4的缺陷,hibernate配置<property name="hibernate.cache.region.factory_class">com.googlecode.hibernate.memcached.MemcachedRegionFactory</property>
spring.jpa.hibernate.cache.region.factory_class=org.hibernate.cache.redis.hibernate5.SingletonRedisRegionFactory ``` 4. **实体类注解**: 对于需要缓存的实体类,可以使用`@Cacheable`、`@CacheEvict`等...
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory <property name="net.sf.ehcache.configurationResourceName">ehcache.xml ``` 接着,在`ehcache.xml`...
本文将深入探讨Hibernate中的缓存机制,特别是第一级缓存,并结合"hibernate_cache_level_1.rar"这个压缩包文件,解析其在实际应用中的实现。 一、Hibernate缓存概述 Hibernate提供了两种级别的缓存:一级缓存和二...
默认使用的是`org.hibernate.cache.internal.NoCachingRegionFactory`,若需开启二级缓存,可设置为`org.hibernate.cache.ehcache.EhCacheRegionFactory`。 9. **hibernate.cache.use_query_cache** 是否启用查询...
版本差异太难搞了,找半天才找到错误,主要是包冲突 NoSuchMethodError: org.jboss....NoClassDefFoundError: org/hibernate/cache/spi/RegionFactory org.hibernate.cache.spi.RegionFactory 记录下来,以备不时