Hibernate中GET和LOAD方法的区别

本文详细解析了Get与Load方法的区别,包括它们在对象加载时机、异常处理及使用场景上的不同。此外,还介绍了Update方法的工作原理及其注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Get vs load :
1. 执行 get 方法: 会立即加载对象。
a. 执行load,若不适用该对象,则不会立即执行插叙操作,而是返回一个代理对象

get 是立即检索 load是延迟检索


2. 若数据表中没有对应的记录.
a. Get 返回null
b. Load 抛出异常
3. Load方法会抛出懒加载异常 LazyInitializationException 在需要初始化对象之前已经关闭了Session


4. 数据库里没有对应记录,且 Session 也没有被关闭.同时需要使用对象时.
a. Get 返回null 
b. Load 若不使用该对象的任何属性,没问题;若需要初始化了,抛出异常

5. Update :
a. 若更新一个持久化对象,不需要显示的调用uoadte 方法. 因为在调用Transaction 的 commit()  方法时,会先执行 session 的 flush 方法
b. 更新一个游离对象,需要显式调用 session 的update 方法,可以把一个游离的对象变成一个持久化的对象


需要注意的:

• 无论需要更新的游离对象和数据表的记录是否一致,都会发送 update 语句

• 如何让update 方法不在盲目的发送 update 语句呢? 在 .hbm.xml 文件的 class 节点设置一个属性叫做 select-before-update 设置为 true0 其值 默认为false 通常不需要设置该属性. 有触发器时才会启用
• 若数据表中没有对应的记录但还调用了 update 方法会抛出异常
• 当 update 方法管理一个游离对象时,如果在Session 的缓存中已经存在相同的 OID 对象, 会抛出异常. 因为在 Session 缓存中,不能有两个 OID 相同的对象!




SaveOrUpdate
注意:
1. 若OID 不为空, 但数据表中没有和气对应的记录. 会抛出一个异常.
2.  了解:若 OID 的值等于 id 的unsaved-value  属性值的对象,也被认为是一个游离的对象(游离对象 临时对象)


Delete :执行删除操作. 只要OID 和数据表中的一条记录对应,就会准备执行 delete 操作
若OID 在数据表中没有对应的记录,则抛出异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值