`

hibernate 个人笔记(1)

阅读更多
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个人学习笔记完整版】是一份详尽的资料,涵盖了Hibernate框架的基础到高级应用,旨在帮助学习者深入理解和掌握这一强大的Java对象关系映射(ORM)工具。Hibernate作为Java开发中的主流ORM框架,它极大地...

    Hibernate3笔记个人记录

    【Hibernate3笔记个人记录】 Hibernate 是一款强大的Java对象关系映射(ORM)框架,它将数据库操作抽象化,使得开发者可以使用面向对象的方式来处理数据库事务,而无需关注底层的SQL语句。本笔记将深入探讨...

    hibernate学习笔记1

    【hibernate学习笔记1】 一、理解Hibernate Hibernate是一个流行的Java对象关系映射(ORM)框架,它的主要目的是简化数据库操作,通过将Java对象与数据库表进行映射,使得开发者能够以面向对象的方式处理数据,而...

    hibernate 个人学习笔记及代码

    通过深入学习和实践这个“hibernate 个人学习笔记及代码”包,初学者可以掌握Hibernate的基础知识和实战技能,为Java开发中的数据库操作打下坚实基础。在学习过程中,建议结合实际项目进行练习,以便更好地理解和...

    尚学堂hibernate学习笔记(原版整理)

    该笔记由作者根据马士兵老师的教程整理而成,其中包含了个人的学习注解,使得内容更加生动易懂。 1. **Hibernate简介** Hibernate是一种开放源代码的ORM框架,它简化了Java应用程序与数据库之间的交互,通过将对象...

    hibernate 学习笔记3

    描述:本篇笔记深入探讨了Hibernate框架中一对多关系的映射及持久化对象状态管理,结合个人理解与实践经验,旨在为读者提供一份详实的学习资料。 ### 一、一对多关系映射详解 在Hibernate框架中,一对多关系是一种...

    邹波老师Hibernate教程学习笔记

    这是一份由个人在观看邹波老师的Hibernate视频教程后精心整理的学习笔记,旨在帮助初学者和有一定基础的程序员更好地理解和运用Hibernate。Hibernate作为Java领域广泛使用的持久化框架,它极大地简化了数据库操作,...

    hibernate学习笔记

    hibernate学习笔记,个人整理的马士兵老师系列讲座的笔记,有些内容是补充的。

    hibernate 学习笔记2

    经典资料+个人心得,希望大家能喜欢

    hibernate自学笔记

    hibernate自学笔记--完整版,完全是个人学习时的心得和总结.

    Hibernate学习笔记(3)

    1. **多表关联查询**:对于复杂的多表关联查询,建议使用QBC,因为它能更好地组织代码结构,提高可读性和可维护性。 2. **性能考虑**:当需要频繁执行大量查询时,可以考虑使用HQL,利用其简洁性快速构建查询。同时...

    韩顺平2011hibernate3.3视频教程ppt、笔记

    二是笔记,可能包括学员在观看视频时记录的重要点、实例解析和个人理解,提供了对课程内容的个人化解读和补充。 【标签】"韩顺平 hibernate ppt 笔记 视频教程" 这些标签明确了教程的核心内容和形式。"韩顺平"代表...

    Hibernate笔记

    【Hibernate关联映射】 在Java开发中,Hibernate作为一种流行的ORM(对象关系映射)框架,提供了将数据库操作转化为面向对象的方式。关联映射是Hibernate中关键的概念,它允许我们在对象模型和数据库表之间建立关系...

    hibernate学习资料大合集

    hibernate笔记.pdf 和 Hibernate学习笔记.pdf** 这两份笔记可能由经验丰富的开发者整理,包含他们在学习和使用Hibernate过程中积累的实用技巧和常见问题解决方案。这些个人经验往往能提供独特的视角和实战经验,...

    Hibernate文档资料

    其次,`Hibernate学习笔记`可能是个人或社区在学习过程中整理的实用技巧和常见问题解答,这些笔记往往包含实践案例,能帮助读者快速解决实际开发中遇到的问题。例如,它们可能会讲解如何处理关联映射,如一对一、一...

    s2sh 个人学习笔记

    这篇个人学习笔记主要聚焦于“s2sh”框架,这是一个基于Spring、Struts和Hibernate的Java Web开发框架。Spring是全面的后端应用管理框架,Struts提供了MVC(模型-视图-控制器)设计模式,而Hibernate则是流行的ORM...

Global site tag (gtag.js) - Google Analytics