Hibernate对象关系映射总结(3)
这里如果设置了lazy:则查从表数据不会包含主表的数据:默认的是:fetch=FetchType.EAGER 其他的对象关系同样理解。
====================================hibernate的缓存========================================== 1: Session 级别的缓存,它同session邦定。它的生命周期和session相同。Session消毁,它也同时消毁,管理一级缓
存,一级缓存无法取消,用两个方法管理,clear(),evict()
2.两个session 不能共享一级缓存,因它会伴随session的生命周期的创建和消毁; 3.Session缓存是实体级别的缓存,就是只有在查询对象级别的时候才使用,如果
使用HQL和SQL是查询属性级别的,是不使用一级缓存的!切记!!!!
4: iterate 查询使用缓存,list()是通过一条SELECT SQL语句实现查询操作;而iterate()则是N+1次的SELECT
SQL语句实现查询操作,第一次它获取了所有的ID,然后再根据每个id查询所对应的对象,所以会有N+1问题出现。 查询N个对象会发N+1条sql语句。
get()和load(),iterate方法都会使用一级缓存 一级缓存无法取消,但可以管理
管理一级缓存的方法: session.clear() session.evict()
如何避免一次性大量的实体数据入库导致内存溢出: 先flush,再clear
一级缓存是缓存实体对象:如果查询普通属性,一级缓存不会缓存,会发出sql 如下:
Iterator<Category> categories2 = (Iterator<Category>)session.createQuery("select from Category a").iterate();
Hiberante3 二级缓存总结
二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享 二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存
1.Hibernate3的(sessionFactory)二级缓存和session级别的缓存一样都只对实体对象做缓存,不对属性级别的查询做缓存
二级缓存的生命周期和sessionFactory的生命周期是一样的,sessionFactory可以管理二级缓存;
Hibernate对象关系映射总结
2.sessionFactory级别的缓存,需要手动配置;所有的session可以共享sessionFactory 级别的缓存;(一般把一些不经常变
化的实体对象放到sessionFactory级别的缓存中,适合放不经常变化的实体对象。)
3.Hiberante3二级缓存的配置和使用方法如下:
1:hibernate.cfg.xml 文件中配置如下:打开二级缓存:二级缓存的提供者:(依懒包:ehcache-1.2.3.jar) <property name="e_second_level_cache">true</property>
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvidehcache-1.2.3.jarer</property> <property name="e_query_cache">true</property> 打开用户缓存 2:src 下需要一个配置文件:ehcache.xml 3:lib下加包:ehcache-1.2.3.jar
4:将要查询缓存的对象:在hibernate.cfg.xml 中进行配置(JPA方式) <mapping class=".hibernateTest.ehcache.Category"/> <mapping class=".hibernateTest.ehcache.Msg"/> <mapping class=".hibernateTest.ehcache.Topic"/> (xml方式)
将要查询缓存的对象:在映射文件中进行配置 <class name="Department" table="oneToManyDupDir_Department"> <cache usage="read-write"/> 一定要写在主键定义之前 <id name="id"> <generator class="native" /> </id> <property name="name"/> </class>
===================================list与iterator区别================================= 1:List 仅仅会填充二级缓存,却不能利用二级缓存:当打开查询缓存时:list能利用查询缓存。 List 是一次读出所有的数据:
2:iterator可以读二级缓存,先从缓存中取数据:没有数据时iterator首先读出所有的id.等用到时才会根据id发送sql语句从 数据库读数据.
测试list:一级缓存:当打开查询缓存时:list也能利用查询缓存*/
public void testQueryList() { Session session = sf.openSession(); session.beginTransaction(); List<Category> categories = (List<Category>)session.createQuery("from Category").list(); for(Category c : categories) {
System.out.println(c.getName()); } 对于list没法利用session级别的缓存(不知道到下次查询的条件是否一样):
还会去数据库取并且刷该缓存(将原来的对象刷新一遍)*/
List<Category> categories2 = (List<Category>)session.createQuery("from Category").list(); for(Category c : categories2) {
System.out.println(c.getName()); }
session.getTransaction().commit(); session.close();
Hibernate对象关系映射总结
} 测试iterator*/ public void testQueryIterate() { Session session = sf.openSession(); session.beginTransaction(); Iterator<Category> categories = (Iterator<Category>)session.createQuery("from Category").iterate(); 它取出所有数据的id:等到下面的用到时才根据刚才取出的id再发sql语句去取该对象*/ while(categories.hasNext()) { Category c = categories.next(); System.out.println(c.getName()); } 再次查询同样的东西时:iterator利用了session级别的缓存:不会发sql从数据库去查询*/ Iterator<Category> categories2 = (Iterator<Category>)session.createQuery("from Category").iterate(); 它还会取出所有数据的id:再从缓存中去取该对象*/ while(categories2.hasNext()) { Category c = categories2.next(); System.out.println(c.getName()); }
session.getTransaction().commit(); session.close(); }
==================================hibernate主键生成总结=======================================
***************************************对应数字型的主键********************************************* 1:oracle用序列================主键字段是数字类型 在Hibernate中使用oracle的sequence
一. 为表创建自增长字段有两种,一种是不同的表使用各自的Sequence,方法如下: 2.在你的hbm.xml中的配置
<id column="ID" name="id" type="integer"> <generator class="sequence">
<param name="sequence">HETONG_SEQ</param> </generator> </id>
在使用的时候需要注意,Hibernate对于sequence的主键的要求是一定要是shor,long,或者integer 2、native:跨数据库时使用,由底层方言产生。:这个要先建一个公共的序列:hibernate_sequence <id name="id" column="id"> <generator class="n …… 此处隐藏:3562字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [求职职场]加法运算定律的运用练习题
- [求职职场]大型石油化工工业过程节能新技术
- [求职职场]2015-2020年中国箱纸板行业分析与投资
- [求职职场]NADEX-IWC5A点焊机故障代码
- [求职职场]英语阅读 非常有用
- [求职职场]鲁卫疾控发〔2012〕2号(联合,印发山东
- [求职职场]2014年莆田公务员行测技巧:数字推理的
- [求职职场]基于最近发展区理论的高中数学课堂有效
- [求职职场]与贸易有关的知识产权协议
- [求职职场]【王风范】微演说·职场演说三
- [求职职场]新时代国珍健康大课堂
- [求职职场]群论期末考试复习题
- [求职职场]施工现场消防安全专项施工方案(范本)-
- [求职职场]初中物理光学知识点归纳完美版
- [求职职场]毕业设计总结与体会范文
- [求职职场]江南大学2018年上半年展示设计第1阶段
- [求职职场]景尚乡民兵参战支前保障方案
- [求职职场]【优质】2019年工会职工之家建设工作总
- [求职职场]数据库技术与应用—SQL Server 2008(第
- [求职职场]汽车变速箱构造与工作原理
- 首钢工业区工业遗产资源保护与再利用研
- 第4课 《大学》节选
- 2016程序文件——检验检测结果发布程序
- 2011年高考试题文言文阅读全解释__2011
- 化学是一门基础的自然科学
- 海外做市商制度的借鉴意义
- 外国建筑史复习资料(
- 七年级下思想品德期末综合测试(二)
- 思政课部2013年上学期教学工作总结
- 电大国际公法任务3 0004
- 《圆的认识》教学设计
- 中国轨道交通牵引变流器行业市场发展调
- 中泰证券#定期报告:坚守时代硬科技和
- 浅论企业财务管理与企业经营投资风险的
- 大功率半导体激光器光纤耦合技术调研报
- 中国传统家具的现状与发展探讨
- Broadcom数字电视芯片助海尔扩展高清电
- 新HSK4词汇练习 超全(五)
- 2013届高考数学单元考点复习12
- 雨霖铃精品课件




