hibernate的缓存
来源:互联网 发布:apache的httpclient包 编辑:程序博客网 时间:2024/06/04 19:31
hibernate session级缓存
在同一个session中,支持load、get、iterate
1、在同一个session中通过load或get根据id得到对象实体将使用缓存
2、在同一个session中通过iterate得到也会使用缓存
例如:...where id<5...,第一条查询语句查询id,后面的语句再根据id查询对象实体,如果后面的查询是...where id<6...,也会发出一条查询语句查询id,但是如果前面查询到的对象将不会再查询,只查询前面没有查询到的对象。
3、其实save也支持缓存,当把一个对象先save后,在调用load或get方法,不会发出查询语句
但是对象的属性不会缓存,一级缓存只缓存对象
hibernate二级缓存
二级缓存被所有的session共享,他的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存,
在不同的session中,支持load、get、iterate,iterate和一级缓存的一样,也是先根据条件查询id,再根据id查询对象实体,两个session中的实体对象一样,第二个session不会发出查询语句
evict方法清除缓存,setCacheMode(CacheMode.IGNORE)方法禁用一级缓存中的数据放到二级缓存中
hibernate查询缓存
开启查询,关闭二级缓存,采用query.list()查询普通属性,在多个session中只发出一条查询语句,但是query.iterate()不会这样,照样发出语句
关闭查询和二级缓存,采用query.list()查询对象实体,会发出语句
开启查询,关闭二级缓存,采用query.list()查询对象实体,在除第一个session以外的session会发出n条查询语句。注意:在查询缓存中,它并不缓存结果集中所包含的实体的确切状态;它只缓存这些实体的标识符属性的值、以及各值类型的结果。
开启查询和二级缓存,采用query.list()查询对象实体,在除第一个session以外的session不会发出语句,这时候使用的是二级缓存缓存的对象
hibernate大批量数据的插入问题
测试:一次插入10万条数据还正常,当插入100完数据的时候出现了java.lang.OutOfMemoryError:Java heap space异常
优化:即每插入20条数据session.flush();和session.clear();这样就会很稳定,这时候的瓶颈应该的数据库本身了,我是这么认为的
注意:大批量数据更新时,如果配置了二级缓存建议禁用一级缓存和二级缓存的交互
- Hibernate的缓存处理
- Hibernate的缓存机制
- Hibernate的缓存机制
- Hibernate的缓存
- hibernate的缓存技术
- hibernate 的缓存理解
- Hibernate的缓存讨论
- Hibernate的一级缓存
- Hibernate的缓存机制
- Hibernate的缓存机制
- hibernate的缓存机制
- Hibernate缓存的种类?
- Hibernate缓存的种类?
- hibernate缓存的问题
- 关于Hibernate的缓存
- Hibernate的缓存
- hibernate的缓存
- Hibernate缓存的使用
- Java路径问题最终解决方案—可定位所有资源的相对路径寻址
- SQL Server 备份和还原全攻略
- TP-PID 短信协议标识
- Java SE、Java EE、Java ME三者的区别
- 链表环的检测及其扩展
- hibernate的缓存
- UML用例图概要
- javaScript去掉重复的字符
- 内心强大的方法
- ImageView.ScaleType说明
- .Net和Java的执行性能比较
- 数据库操作连接
- c++类中使用STL静态变
- 挑战视觉感官极限的超级单曲MR