`
wolfhml
  • 浏览: 2846 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于merge() attachDirty() attachClean()三种方法

阅读更多
// 关于merge() attachDirty() attachClean()三种方法下面做一个简单的介绍
 /** 
 * 将传入的detached状态的对象的属性复制到持久化对象中,并返回该持久化对象。 
 * 如果该session中没有关联的持久化对象,加载一个,如果传入对象未保存,保存一个副本并作为持久对象返回,传入对象依然保持detached状态。 
 */

  public CodeDepts merge(Usertable detachedInstance) { 
  log.debug("merging Usertable instance"); 
  try { 
	  Usertable result = (Usertable) getSession() .merge(detachedInstance); 
	  log.debug("merge successful"); 
	  return result; 
  } catch (RuntimeException re) {
   log.error("merge failed", re); 
   throw re; 
  } 
 } 
   
   /** 
   * 将传入的对象持久化并保存。 
   * 如果对象未保存(Transient状态),调用save方法保存。如果对象已保存(Detached状态),调用update方法将对象与Session重新关联。 
   */ 
   public void attachDirty(Usertable instance) { 
   log.debug("attaching dirty Usertable instance"); 
   try { 
	   getSession().saveOrUpdate(instance); 
	   log.debug("attach successful"); 
   } catch (RuntimeException re) { 
      log.error("attach failed", re); 
      throw re; 
   } 
  } 
  /** 
  * 将传入的对象状态设置为Transient状态 
  */ 
  public void attachClean(Usertable instance) { 
  log.debug("attaching clean Usertable instance"); 
  try { 
	  getSession().lock(instance, LockMode.NONE); 
	  log.debug("attach successful"); 
  } catch (RuntimeException re) { 
     log.error("attach failed", re); 
     throw re; 
  } 
 }
  

   merge:将传入的detached状态的对象的属性复制到持久化对象中,并返回该持久化对象 。
   如果该session中没有关联的持久化对象,加载一个,如果传入对象未保存,保存一个副本并作为持久对象返回,传入对象依然保持detached状态。
  
   attachDirty:将传入的对象持久化并保存。
   如果对象未保存(Transient状态),调用save方法保存。
   如果对象已保存(Detached状态),调用update方法将对象与Session重新关联。
   attachClean:将传入的对象状态设置为Transient状态。
   说明一下,在Hibernate中的对象有三种状态,即: 瞬时状态(Transient)、持久状态(Persistent)、脱管状态(Detached)
   1、瞬时状态(Transient) 由new命令开辟内存空间的Java对象,也就是平时所熟悉的普通Java对象。 如:Person p = new Person();
   瞬时对象特点:
   (1)不和Session实例关联
   (2)在数据库中没有和瞬时对象关联的记录
   2、持久状态(Persistent) 持久的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier).
   持久对象总是与Session和Transaction相关联,在一个Session中,对持久对象的改变不会马上对数据库进行变更,
   而必须在Transaction终止,也就是执行commit()之后,才在数据库中真正运行SQL进行变更,持久对象的状态才会与数据库进行同步。
   在同步之前的持久对象称为脏(dirty)对象。
   瞬时对象转为持久对象:
   (1) 通过Session的save()和saveOrUpdate()方法把一个瞬时对象与数据库相关联,这个瞬时对象就成为持久化对象。
   (2) 使用fine(),get(),load()和iterater()待方法查询到的数据对象,将成为持久化对象。
   持久化对象的特点:
   (1) 和Session实例关联
   (2) 在数据库中有和持久对象关联的记录
   3、脱管状态(Detached) 与持久对象关联的Session被关闭后,对象就变为脱管对象。对脱管对象的引用依然有效,对象可继续被修改。
   脱管对象特点:
   (1) 本质上和瞬时对象相同
   (2) 只是比瞬时对象多了一个数据库记录标识值id.
   持久对象转为脱管对象: 当执行close()或clear(),evict()之后,持久对象会变为脱管对象。
   瞬时对象转为持久对象: 通过Session的update(),saveOrUpdate()和lock()等方法,把脱管对象变为持久对象。
分享到:
评论

相关推荐

    Hibernate merge、update与saveOrUpdate方法的区别

    在Hibernate框架中,`merge`、`update`与`saveOrUpdate`这三个方法都是用于更新或保存实体对象到数据库中的,但它们之间存在着重要的区别,这些区别主要体现在对实体状态的处理方式上。 #### 1. `merge` 方法 `...

    Araxis Merge v6.5/Araxis Merge 2017比对工具

    Araxis Merge是一款比对软件工具,不仅支持单个文件的比对,而且支持对两个文件夹的所有文件进行对比,并实时修改。用了蛮久感觉很好用,所以分享给大家。 里面给大家内嵌了Araxis Merge v6.5和Araxis Merge 2017两...

    Hibernate中的merge使用详情解说

    在 Hibernate 中,对象可以处于三种状态:瞬态、游离态和持久态。当对象处于瞬态时,它还没有被保存到数据库中;当对象处于游离态时,它已经被保存到数据库中,但是当前 Session 已经关闭;当对象处于持久态时,它...

    WinMerge WinMerge WinMerge

    WinMerge是一款强大的文本和文件比较工具,尤其在IT行业中,它是开发者和版本控制使用者的得力助手。这个软件能够帮助用户高效地对比不同版本的代码或者其他文本文件,从而快速定位和理解版本之间的差异。 首先,...

    winmerge代码比较工具

    WinMerge是一款高效且易用的代码比较工具,类似于知名的Beyond Compare,但它提供了一种免注册码的使用体验,对于开发者和日常文件管理用户来说,它是一个非常实用的选择。这款软件的核心功能是帮助用户进行文件和...

    详解git merge命令应用的三种情景

    本文将详细探讨`git merge`命令应用的三种不同情景,并通过示例代码来详细说明。 ### 1. 快进合并(Fast-forward Merge) 快进合并是最简单的一种合并方式。它发生在当合并的目标分支是当前分支的直接上游时,意味...

    P4Merge, Linux上最好用的merge工具,附git集成

    P4Merge是一款强大的可视化三向合并工具,尤其在Linux环境中,它被广泛认为是最佳的merge工具之一。由Perforce公司开发,P4Merge以其清晰的界面、强大的冲突解决能力和高效的工作流程而受到开发者们的喜爱。本文将...

    AraxisMerge绿色版

    此外,Araxis Merge还支持三向对比,即可以同时比较三个文件或文件夹,这对于解决代码冲突或合并不同来源的版本非常有用。例如,在团队开发中,当两位开发者对同一部分代码进行了不同的修改,Araxis Merge可以帮助...

    merge的注意事项

    在探讨“merge的注意事项”这一主题时,我们深入解析Hibernate框架中merge操作的特性与应用场景,以及它与其他数据持久化方法的区别,特别是与saveOrUpdate函数的对比。这不仅有助于理解Hibernate的核心机制,还能...

    Araxis Merge v6.5(含破解补丁)

    2. **三向合并**:除了比较两个文件,Araxis Merge还支持三向合并,这对于版本控制系统的使用者尤为重要。它可以帮助用户解决合并冲突,通过比较基线版本、本地版本和远程版本,找出最佳的合并解决方案。 3. **HTML...

    开源软件 winmerge 代码

    - **三向合并**:当有三个版本的文件需要合并时,WinMerge 的三向合并功能可将三个文件的差异进行对比,便于合并。 3. **用户界面与定制**: - **图形化界面**:WinMerge 提供了直观的图形用户界面,让用户可以...

    MergeList_Sq.zip_MergeList Sq_MergeList_Sq

    在“MergeList_Sq.cpp”文件中,可能会实现以上的一种或两种方法,具体取决于代码的设计。通常,为了提高效率,我们会在合并过程中尽量减少元素之间的比较次数,因为这是主要的时间消耗点。对于大线性表,这种优化...

    Mybatis批量foreach merge into的用法

    Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...

    WinMerge(文件比较)

    - **三向合并**:在协同开发环境中,WinMerge支持三向合并,可以帮助开发者解决冲突,将各自的修改整合到同一份文件中。 - **可视化界面**:其直观的界面设计使得差异一目了然,通过颜色高亮和侧边栏对比,用户可以...

    WinMerge.zip

    WinMerge是一款强大的文本比较工具,尤其在IT行业中,它被广泛用于代码的差异对比和版本控制。这款软件能够帮助开发者迅速地找出两个文件或者目录之间的差异,并提供方便的合并功能,极大地提升了工作效率。 标题...

    WinMerge文件比较工具

    - **合并冲突**:在版本控制系统中,当多人编辑同一文件时可能出现冲突,WinMerge提供了一种便捷的解决冲突方式,允许用户合并差异。 2. **用户界面**: - **分栏视图**:WinMerge采用左右两栏布局,显示待比较的...

    Pandas 数据处理详解:merge、join 和 concat 方法的应用

    本文主要介绍如何在 pandas 包中使用 merge、join 和 concat 这些基本的数据合并和拼接方法。merge 方法用于基于多个 DataFrame 间的公共列进行连接。通过 how 参数可以实现左连接(left),右连接(right),内连接...

    oracle Merge 函数.doc

    Merge 函数的使用方式有三种:只更新不插入、只插入不更新和既插入也更新。 Merge 函数的基本用法 Merge 函数的基本语法结构为: ```sql MERGE INTO 目标表 USING 来源表 ON (条件) WHEN MATCHED THEN 更新操作 ...

    WinMerge工具免安装版-开源免费.7z

    4. **三向合并**:除了比较两个文件,WinMerge还支持三向合并,用于解决合并冲突,这对于版本控制系统(如Git)的用户来说非常有用。 5. **自定义设置**:用户可以根据自己的需求调整比较规则,比如忽略空格、注释...

Global site tag (gtag.js) - Google Analytics