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 在数据表中没有对应的记录,则抛出异常
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 在数据表中没有对应的记录,则抛出异常