Hibernate的update()和merge()的区别
2013-09-09 23:33
435 查看
在说hibernate的update方法和marge方法时得先提以下hibernate
bean对象的三种状态.
1、瞬时(Transient)-由new操作符创建,且尚未与Hibernate
Session关联的对象被认定为瞬时(Transient)的。瞬时(Transient)对象不会被持久化到数据库中,也不会被赋予持久化标识
(identifier)。假如瞬时(Transient)对象在程序中没有被引用,它会被垃圾回收器(garbage
collector)销毁。使用HibernateSession可以将其变为持久(Persistent)状态。(Hibernate会自动执行必要的SQL语句)
2、持久(Persistent)-持久(Persistent)的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier)。持久(Persistent)的实例可能是刚被保存的,或刚被加载的,无论哪一种,按定义,它存在于相关联的Session作用范围内。
Hibernate会检测到处于持久(Persistent)状态的对象的任何改动,在当前操作单元(unit
of work)执行完毕时将对象数据(state)与数据库同步(synchronize)。开发者不需要手动执行UPDATE。将对象从持久(Persistent)状态变成瞬时(Transient)状态同样也不需要手动执行DELETE语句。
3、脱管(Detached)-与持久(Persistent)对象关联的Session被关闭后,对象就变为脱管(Detached)的。对脱管(Detached)对象的引用依然有效,对象可继续被修改。脱管(Detached)对象假如重新关联到某个新的Session上,会再次转变为持久(Persistent)的(在Detached其间的改动将被持久化到数据库)。这个功能使得一种编程模型,即中间会给用户思考时间(user
think-time)的长时间运行的操作单元(unit of work)的编程模型成为可能。我们称之为应用程序事务,即从用户观点看是一个操作单元(unit
of work)。
在了解了hibernatebean的三种状态后下面就好说update方法和marge'方法的区别了。
update执行:
1. 首先在Session内部缓存中进行查找,如果发现则直接返回。
2. 执行实体类对应的Interceptor.isUnsaved方法(如果有的话),判断对象是否为未保存状态。
3. 根据unsaved-value判断对象是否处于未保存状态。
4. 如果对象未保存(Transient状态),则调用save方法保存对象。
5. 如果对象未已保存(Detached状态),则调用update方法将对象与Session重新关联。
另外有一个图片:
transient:暂时的
persistent:持续的
detached:分离的,游离的
而merge的意思是合并的意思。是合并两个session中的同一个对象,这句话的意思是,如果你修改了某个对象的值,marge会把原来的对象内容抛出,只保存更新之后的对象。
marge在合并两个对象之前会先执行一个select语句,查询时候有同一个对象,然后才会保存对象。
bean对象的三种状态.
1、瞬时(Transient)-由new操作符创建,且尚未与Hibernate
Session关联的对象被认定为瞬时(Transient)的。瞬时(Transient)对象不会被持久化到数据库中,也不会被赋予持久化标识
(identifier)。假如瞬时(Transient)对象在程序中没有被引用,它会被垃圾回收器(garbage
collector)销毁。使用HibernateSession可以将其变为持久(Persistent)状态。(Hibernate会自动执行必要的SQL语句)
2、持久(Persistent)-持久(Persistent)的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier)。持久(Persistent)的实例可能是刚被保存的,或刚被加载的,无论哪一种,按定义,它存在于相关联的Session作用范围内。
Hibernate会检测到处于持久(Persistent)状态的对象的任何改动,在当前操作单元(unit
of work)执行完毕时将对象数据(state)与数据库同步(synchronize)。开发者不需要手动执行UPDATE。将对象从持久(Persistent)状态变成瞬时(Transient)状态同样也不需要手动执行DELETE语句。
3、脱管(Detached)-与持久(Persistent)对象关联的Session被关闭后,对象就变为脱管(Detached)的。对脱管(Detached)对象的引用依然有效,对象可继续被修改。脱管(Detached)对象假如重新关联到某个新的Session上,会再次转变为持久(Persistent)的(在Detached其间的改动将被持久化到数据库)。这个功能使得一种编程模型,即中间会给用户思考时间(user
think-time)的长时间运行的操作单元(unit of work)的编程模型成为可能。我们称之为应用程序事务,即从用户观点看是一个操作单元(unit
of work)。
在了解了hibernatebean的三种状态后下面就好说update方法和marge'方法的区别了。
update执行:
1. 首先在Session内部缓存中进行查找,如果发现则直接返回。
2. 执行实体类对应的Interceptor.isUnsaved方法(如果有的话),判断对象是否为未保存状态。
3. 根据unsaved-value判断对象是否处于未保存状态。
4. 如果对象未保存(Transient状态),则调用save方法保存对象。
5. 如果对象未已保存(Detached状态),则调用update方法将对象与Session重新关联。
另外有一个图片:
transient:暂时的
persistent:持续的
detached:分离的,游离的
而merge的意思是合并的意思。是合并两个session中的同一个对象,这句话的意思是,如果你修改了某个对象的值,marge会把原来的对象内容抛出,只保存更新之后的对象。
marge在合并两个对象之前会先执行一个select语句,查询时候有同一个对象,然后才会保存对象。
相关文章推荐
- hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)等
- hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
- hibernate的save,persis,update,saveOrUpdte,merge,flush,lock等区别
- hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)等 (转)
- 总结hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)
- hibernate的各种保存方式的区别(save,persist,update,saveOrUpdte,merge,flush,lock)及对象的三种状态
- Hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)等
- 【转】hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)等
- hibernate中各种保存方法的区别 save persist update saveOrUpdate merge lock
- Hibernate中load与get,update与merge方法的区别
- hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)等
- Hibernate中saveOrUpdate、update和merge的区别
- Hibernate三种状态(Transient、Persistent、Detached)各种保存(save,persist,update,saveOrUpdte,merge,flush,lock)区别
- hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)等
- hibernate中各种保存方法的区别 save persist update saveOrUpdate merge lock
- hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
- Hibernate三种状态(Transient、Persistent、Detached)各种保存(save,persist,update,saveOrUpdte,merge,flush,lock)区别
- hibernate merge与update区别
- 转贴 hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)等
- Hibernate中对象的三种状态以及Session类中saveOrUpdate方法与merge方法的区别