`

Hibernate重附(Reattach)和合并(Merge)操作的比较

阅读更多

作者:狂放不羁
网址:http://yquan-nana.iteye.com

>>>转载请注明出处!<<<

 

Hibernate中将对象从托管状态转变为持久化状态可以采用两种方法:重附(Reattach)和合并(Merge)。下面分别总结一下:

 

第一种:重附

重附操作使得一个托管对象重新受到persistence context的管理,具体可以采用两种方法:

 

1 update方法,此方将实体对象从托管状态转变为持久化状态,但是需要注意的是如果当前的持久化上下文(persistence context)中已经存在了一个和托管对象有相同标识符的持久化对象就会抛出NonUniqueException,因为在持久化上下文中,对数据库表中的每一条记录来说,都只能有一个对象与其对应,这样方便持久化对象的脏检测。此方法强制一个update语句,进行持久化对象与数据库的同步。

 

2 lock方法。lock方法也用与将一个托管对象状态转化为持久化,但是此方法的限制是在确保对象没有被修改的情况下,如果在调用方法之前,修改了对象,那么当事务提交的时候,修改是不会被传播到数据库里的。

 

第2种:合并

所谓合并就是将托管对象的状态复制到持久化对象里,然后生产一个新的持久化对象。并且合并还有一个作用就是可以将一个transient状态的对象变为persistent状态。在合并操作里,有两种情况:

1 如果当前的持久化上下文种没有与托管对象相同标识符的对象,那么Hibernate隐式的调用select来查询,如果数据库种有记录,那么就将托管对象的状态与新查询到的对象进行合并,如果数据库没有对应的记录,那么就新建一个持久化对象,然后将托管对象的状态复制到持久化对象里。

2 如果持久化上下文种有与托管对象相同标识符的对象,那么就将托管对象的状态复制到持久化对象里。(合并中需要注意的是原来托管的对象还是托管的,只不过merge返回的是一个新的持久化对象。)

 

 

需要注意的是JPA里只支持合并,不支持重附。 <script type="text/javascript"></script>

3
1
分享到:
评论

相关推荐

    ReAttach线程附加

    VS线程附加调试工具、

    Hibernate例子

    Hibernate 是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。在这个例子中,我们将深入理解Hibernate的核心概念、配置以及如何在实际项目中应用。 **1. ...

    pam_reattach:在验证过程中重新连接到macOS上的用户GUI会话(用于tmux中的Touch ID支持)

    在IT领域,尤其是在操作系统安全和身份验证方面,`pam_reattach`是一个非常重要的工具,特别是对于macOS用户。这个工具的主要功能是允许在验证过程(如使用Touch ID)后重新连接到用户的图形用户界面(GUI)会话。在...

    cadence原理图设计

    理解并掌握Cadence原理图设计的基本流程和操作技巧对于电子工程师而言至关重要,它将直接影响电路设计的正确性和设计效率。对于初学者来说,通过本文的介绍,可以对Cadence原理图设计有一个初步的认识和了解,并为...

    tmux-MacOSX-pasteboard:在tmux会话中访问Mac OS X粘贴板的说明和解决方法。 注意:pu分支(“建议的更新”)可能会被撤消,恕不另行通知

    快速总结在旧版本的tmux下使用Mac OS X程序pbpaste和pbcopy可能无法正常工作。 其他服务和未打补丁的屏幕版本也会受到... make reattach-to-user-namespace && cp reattach-to-user-namespace ~/bin或者,您可以使用或

    New NHibernate + Sample Source Part2

    NHibernate is a port of Hibernate Core for Java to the .NET Framework. It handles persisting plain .NET objects to and from an underlying relational database. Given an XML description of your entities...

    New NHibernate + Sample Source Part1

    NHibernate is a port of Hibernate Core for Java to the .NET Framework. It handles persisting plain .NET objects to and from an underlying relational database. Given an XML description of your entities...

    NHibernate 2.0.1 + Movies + Sample Source Part2

    NHibernate is a port of Hibernate Core for Java to the .NET Framework. It handles persisting plain .NET objects to and from an underlying relational database. Given an XML description of your entities...

    linux-st终端配置

    在Linux操作系统中,终端配置是每个用户日常工作中不可或缺的一部分,特别是对于系统管理员和开发者来说,一个定制化的终端环境可以极大地提高工作效率。"linux-st终端配置"这个主题主要涉及如何个性化和优化Linux...

    tmux使用(程序员适用)

    - **自动恢复**:配置`tmux.conf`启用`reattach-to-user-namespace`以在系统重启后自动恢复session。 - **配色方案**:可以修改`tmux.conf`中的`status-left`和`status-right`以定制状态栏颜色和信息。 - **共享...

    Dotfiles:我的[NeoVim + Tmux + Fish Shell]安装程序带有安装脚本

    i3,Gnome和其他与操作系统相关的设置的。 安装脚本可用于Ubuntu OS。 Vim语言支持 去(好) R,Python (良好) 笔记 Tmux + Vim配置 tmux.conf进入~/.tmux.conf nvim/和fish/进入~/.config/(nvim|fish) 安装Tmux...

    maya中英文对照.docx

    本文将详细介绍Maya中英文对照的关键术语,帮助用户更好地理解和操作这款软件。 一、动画模块(Animation) 1. Keys(关键帧):在时间线上设定的特定帧,用于记录对象的位置、旋转或缩放变化,是创建动画的基础。 ...

    vscode-firefox-debug:Firefox的VS Code调试适配器

    支持的功能暂停,包括高级和模式使用暂停对象属性更改调试期间使用注射记录 调试评估脚本,脚本标签和动态添加和/或源映射的脚本用于检查和设置值的变量窗格观察窗格,用于评估和观察表达式记录和REPL的控制台调试...

    .dotfiles:点文件备份

    在IT领域,".dotfiles" 是一个特殊的概念,它指的是用户自定义的配置文件,通常以点(.)开头,隐藏在操作系统中。这些文件用于存储个人化设置,如终端模拟器的主题、编辑器的配置、shell的启动脚本等。它们在用户的...

    tmux1.9 linux多屏管理软件

    之后,用户可以通过重新附加(reattach)来恢复这些会话。 3. **窗口和面板**:用户可以在一个会话中创建多个窗口,每个窗口可以进一步分割为多个面板,实现不同命令行界面的并排显示。 4. **键绑定定制**:`tmux`...

    dotfiles:这些是我的dotfile,我的配置,我想共享的shell主页

    这些是我的dotfile,我的配置,我想共享的shell主页。快速开始要启动并运行它,请先将其下拉到$ HOME中: $ git...powerline 在鱼中为复制reattach-to-user-namespace配置了reattach-to-user-namespace 命令描述ctrl +

    maya动画英汉互译表

    对于学习和使用Maya进行动画创作的用户来说,这份对照表能够提供直观的帮助,通过将英文菜单项翻译成中文,使得国内用户能够更快地熟悉和操作Maya软件中的各项功能。 ### 详细知识点解析 #### 动画(Animation) ...

    vim-anywhere:在您一直想要的任何地方使用Vim

    Vim-anywhere是一款实用工具,它允许用户在操作系统中的任何位置快速启用Vim编辑器进行文本操作。这个工具尤其适合那些习惯于Vim的强大功能和快捷键的开发者和程序员,他们可以在不离开当前应用或窗口的情况下,利用...

    多路复用器

    - **团队协作**:通过共享TMUX会话,团队成员可以协同查看和操作同一份代码或系统状态。 ### 总结 TMUX作为一个强大的终端多路复用器,提供了一种高效的工作环境,允许用户在同一窗口下管理多个shell会话,自定义...

Global site tag (gtag.js) - Google Analytics