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:唯一的一对多也就是一对一-->
一对多,多对一关联:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值