1. 关键字: fetch、lazy、 cascade、 inverse
结论1:HQL代码 > fetch(配置) > lazy (配置); fetch 是老大。
结论2:默认 lazy="true";
结论3:fetch 和 lazy 主要是用来级联查询的,而 cascade 和 inverse 主要是用来级联插入和修改的;
结论4:如果你是用spring来帮你管理你的session,并且是自动提交,延迟加载就等于没加载~_~(当然除非你手动重新打开session,然后手动Hibernate.initialize(set),然后关闭session);
结论5:cascade主要是简化了在代码中的级联更新和删除;
结论6:老爸可以有多个孩子,一个孩子不能有多个老爸,而且老爸说的算, 孩子围着老爸转。
fetch 属性 - fetch就是在代码这一层给你一个主动抓取得机会,- fetch的优先级高于lazy,若出现了fetch,则忽略lazy
fetch = "join" (默认) 它会自动自动禁止lazy loading。主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。效率高点
fetch = "select" 先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询。
lazy 属性
lazy=false: 立即检索,这是一对多默认的检索策略。但如果关联的集合是无用的,那么就不要使用这种检索方式。
lazy=true: 延迟检索,outer-join=false(outer-join=true是无意义的),这是优先考虑的检索方式。
outer-join 迫切左外连接检索
1) outer-join=auto:这是默认值,如果lazy=true为延迟检索,如果lazy=false为迫切左外连接检索。
2) outer-join=true,无关于lazy,都为迫切左外连接检索。
3) outer-join=false,如果lazy=true为延迟检索,否则为立即检索。
inverse 属性 默认是false的。让对方去维护外键。表示由该方维护关联关系。是否把对set的改动反映到数据库。cascade定义的是关系两端对象到对象的级联关系;而inverse定义的是关系和对象的级联关系。
建议:只对set: many-to-many设置inverse=false,其他的标记不考虑inverse属性,都设为inverse=true。对cascade,一般对many-to-one,many-to-many,constrained=true的one-to-one 不设置级联删除。
2. 使用关联关系操作对象
一对一关联: 在一对一关联中,默认的是预先抓取。如果想将其设为延迟加载,必须是constrained="true"和附属类的lazy="true"一起。但是指定fetch="join",则无效还是预先抓取。
a. 以主键关联。 关键: 如何让另一张表引用已经生成的主键值。
<id name="id" unsaved-value="null"> <!--id的产生方式是uuid.hex-->
<generator class="uuid.hex" />
</id>
<one-to-one name="cer" class="model.Certificate" fetch="join" cascade="all" /><!--映射对应的身分证对象-->
<generator class="foreign"> <!--这里的关键是foreign,说明这里的主键生成方式是引用stu对象的主键作为自己的主键-->
<param name="property">stu</param>
</generator>
<one-to-one name="stu" class="model.Student" fetch="select" constrained="true" cascade="none"/> <!--constrained表示引用了stu的主键作为外键-->
b. 以外键关联。
<id name="id" unsaved-value="null"><!--id的产生方式是uuid.hex-->
<generator class="uuid.hex" />
</id>
<one-to-one name="cer" class="model.Certificate" fetch="join" cascade="all" /><!--映射对应的身分证对象-->
<id name="id"> <!--注意:这里和上面的区别-->
<generator class="uuid.hex" />
</id>
<many-to-one name="stu" class="model.Student" unique="true" column="stu_id"/> <!--unique:唯一的一对多也就是一对一-->
一对多,多对一关联:
分享到:
相关推荐
【hibernate个人学习笔记完整版】是一份详尽的资料,涵盖了Hibernate框架的基础到高级应用,旨在帮助学习者深入理解和掌握这一强大的Java对象关系映射(ORM)工具。Hibernate作为Java开发中的主流ORM框架,它极大地...
【Hibernate3笔记个人记录】 Hibernate 是一款强大的Java对象关系映射(ORM)框架,它将数据库操作抽象化,使得开发者可以使用面向对象的方式来处理数据库事务,而无需关注底层的SQL语句。本笔记将深入探讨...
【hibernate学习笔记1】 一、理解Hibernate Hibernate是一个流行的Java对象关系映射(ORM)框架,它的主要目的是简化数据库操作,通过将Java对象与数据库表进行映射,使得开发者能够以面向对象的方式处理数据,而...
通过深入学习和实践这个“hibernate 个人学习笔记及代码”包,初学者可以掌握Hibernate的基础知识和实战技能,为Java开发中的数据库操作打下坚实基础。在学习过程中,建议结合实际项目进行练习,以便更好地理解和...
该笔记由作者根据马士兵老师的教程整理而成,其中包含了个人的学习注解,使得内容更加生动易懂。 1. **Hibernate简介** Hibernate是一种开放源代码的ORM框架,它简化了Java应用程序与数据库之间的交互,通过将对象...
描述:本篇笔记深入探讨了Hibernate框架中一对多关系的映射及持久化对象状态管理,结合个人理解与实践经验,旨在为读者提供一份详实的学习资料。 ### 一、一对多关系映射详解 在Hibernate框架中,一对多关系是一种...
这是一份由个人在观看邹波老师的Hibernate视频教程后精心整理的学习笔记,旨在帮助初学者和有一定基础的程序员更好地理解和运用Hibernate。Hibernate作为Java领域广泛使用的持久化框架,它极大地简化了数据库操作,...
hibernate学习笔记,个人整理的马士兵老师系列讲座的笔记,有些内容是补充的。
经典资料+个人心得,希望大家能喜欢
hibernate自学笔记--完整版,完全是个人学习时的心得和总结.
1. **多表关联查询**:对于复杂的多表关联查询,建议使用QBC,因为它能更好地组织代码结构,提高可读性和可维护性。 2. **性能考虑**:当需要频繁执行大量查询时,可以考虑使用HQL,利用其简洁性快速构建查询。同时...
二是笔记,可能包括学员在观看视频时记录的重要点、实例解析和个人理解,提供了对课程内容的个人化解读和补充。 【标签】"韩顺平 hibernate ppt 笔记 视频教程" 这些标签明确了教程的核心内容和形式。"韩顺平"代表...
【Hibernate关联映射】 在Java开发中,Hibernate作为一种流行的ORM(对象关系映射)框架,提供了将数据库操作转化为面向对象的方式。关联映射是Hibernate中关键的概念,它允许我们在对象模型和数据库表之间建立关系...
hibernate笔记.pdf 和 Hibernate学习笔记.pdf** 这两份笔记可能由经验丰富的开发者整理,包含他们在学习和使用Hibernate过程中积累的实用技巧和常见问题解决方案。这些个人经验往往能提供独特的视角和实战经验,...
其次,`Hibernate学习笔记`可能是个人或社区在学习过程中整理的实用技巧和常见问题解答,这些笔记往往包含实践案例,能帮助读者快速解决实际开发中遇到的问题。例如,它们可能会讲解如何处理关联映射,如一对一、一...
这篇个人学习笔记主要聚焦于“s2sh”框架,这是一个基于Spring、Struts和Hibernate的Java Web开发框架。Spring是全面的后端应用管理框架,Struts提供了MVC(模型-视图-控制器)设计模式,而Hibernate则是流行的ORM...