作者:狂放不羁
网址: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>
分享到:
相关推荐
VS线程附加调试工具、
pam_reattach:在验证过程中重新连接到macOS上的用户GUI会话(用于tmux中的Touch ID支持)
快速总结在旧版本的tmux下使用Mac OS X程序pbpaste和pbcopy可能无法正常工作。 其他服务和未打补丁的屏幕版本也会受到... make reattach-to-user-namespace && cp reattach-to-user-namespace ~/bin或者,您可以使用或
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 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 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...
i3,Gnome和其他与操作系统相关的设置的。 安装脚本可用于Ubuntu OS。 Vim语言支持 去(好) R,Python (良好) 笔记 Tmux + Vim配置 tmux.conf进入~/.tmux.conf nvim/和fish/进入~/.config/(nvim|fish) 安装Tmux...
支持的功能暂停,包括高级和模式使用暂停对象属性更改调试期间使用注射记录 调试评估脚本,脚本标签和动态添加和/或源映射的脚本用于检查和设置值的变量窗格观察窗格,用于评估和观察表达式记录和REPL的控制台调试...
这些是我的dotfile,我的配置,我想共享的shell主页。快速开始要启动并运行它,请先将其下拉到$ HOME中: $ git...powerline 在鱼中为复制reattach-to-user-namespace配置了reattach-to-user-namespace 命令描述ctrl +
RxGroups RxGroups lets you group RxJava Observables together in groups and tie them to ... You'll probably want to guarantee that you can reattach to the same in-flight or completed request after rotati
install reattach-to-user-namespace # Zsh install zsh --disable-etcdir install zsh-completions # tap tap peco/peco tap motemen/ghq # Cask cask dropbox cask virtualbox cask vagrant cask chefdk 执行啤酒...
reattach-to-user-namespace rsyslog siege the_silver_searcher \ tmux zsh 自动跳转 ctags旺盛的(用于.vim / bundle / tagbar) fmdiff 中心 jslint 节点 重新附加到用户命名空间(从tmux启用pbcopy,...
nc作为默认格式化程序,只需将此选项放在.rspec文件中: --format Nc还包括其他两个格式化程序: NcFail –仅在发生故障时通知NcFirstFail –仅在第一次失败时通知多路复用器在tmux下使用rspec-nc需要reattach-to-...
离子MP3播放器 离子MP3播放器 入门 导航到目录: cd Ionic-MP3-Player NPM: npm install 离子框架: : 是否已在全球范围内npm install -g ionic ... 克隆此存储库上传到您的git reattach将heroku附加到您的存储库
.dotfiles 我的.dotfiles 配置 sh 我的天啊 aotoki.zsh-theme(我的自定义主题) rvm phpbrew 虚拟机 gvm(Golang) 人类病毒 ...brew install reattach-to-user-namespace brew install bat
预安装 tuxx,neovim # tmuxbrew install tmuxbrew install reattach-to-user-namespacegit clone https://github.com/tmux-plugins/tpm ~ /.tmux/plugins/tpm# neovimbrew install neovim --HEADbrew install node...
7="INQU reattach error" 8="INQU mode sense error" 9="INQU mode select error" 10="NAND invalid bus selector" 11="NAND invalid function selector" 12="NAND invalid ...
SYNONYMS reattach, relocate, rigid motion, relative position dimensions, relative positioning, RPO, transform HELP DSN_feature_edit BITMAP editrpo POPUP_LABEL Edit P&ositioning... POPUP_MESSAGE ...