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
实例中有spring整合hibernate的实例,并且配置了hibernate的二级缓存,希望对大家有所帮助
学习hibernate_cache_level二级缓存项目
Hibernate cache Demo ,手把手教程
<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...
Hibernate 使用缓存时,数据同步问题
Hibernate高级配置 1. Hibernate与触发器协同工作 1)、触发器使session的缓存中的数据与数据库中的数据不一致 2)、session的update()方法...7. hibernate cache 缓存 8. hibernate缓存方案 9. Hibernate二级缓存配置
hibernate caching 培训内容, 熟悉hibernate cache
基于Jboss Cache的hibernate二级缓存机制
NULL 博文链接:https://hw1287789687.iteye.com/blog/1947557
解决目前memcached不支持hibernate4的缺陷,hibernate配置<property name="hibernate.cache.region.factory_class">com.googlecode.hibernate.memcached.MemcachedRegionFactory</property>
NULL 博文链接:https://chinrui.iteye.com/blog/1859820
版本差异太难搞了,找半天才找到错误,主要是包冲突 NoSuchMethodError: org.jboss....NoClassDefFoundError: org/hibernate/cache/spi/RegionFactory org.hibernate.cache.spi.RegionFactory 记录下来,以备不时
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider hibernate.cache.use_query_cache必须配置,如果想缓存使用findall()、list()、Iterator()、createCriteria()、 ...
源码 博文链接:https://raymondhekk.iteye.com/blog/250427
基本的缓存原理,存在的问题,动态表相关.。。。
ehcache-1.5.0.jar hibernate cache
#hibernate.dialect org.hibernate.dialect.Cache71Dialect #hibernate.connection.driver_class com.intersys.jdbc.CacheDriver #hibernate.connection.username _SYSTEM #hibernate.connection.password SYS #...
HIBERNATE 中的 CACHE 有两级 . 一级是在 Session 范围内的 CACHE . 即每个 Session 有自己的一个 CACHE, 当前操作的对象都会被保留在 CACHE 中 . 但是 Session 关闭后这个 CACHE 也就没有 . 可见这级 CACHE 的生命...