博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate中处于detached状态的Entity对象融合(merge)得到另一个persistent状态的Entity对象
阅读量:4178 次
发布时间:2019-05-26

本文共 1055 字,大约阅读时间需要 3 分钟。

在应用中,处于detached状态的Entity对象,是指那些在中有对应的记录,但是由于持久化上下文关闭close(),或持久化上下文清空clear(),或者被持久化上下文删除evict(),而导致与持久化上下文不再关联的Entity对象。

处于detached状态的Entity对象,虽然在Hibernate应用中仍然可以对其进行操作,但是这些操作的结果无法自动同步存储到数据库中。

Hibernate应用中,处于detached状态的Entity对象,可以通过融合操作(merge)得到另一个persistent状态的Entity对象。也就是说,对于一个处于detached状态的Entity对象,当持久化上下文对其进行merge()操作时,实际上首先是根据其标识符从数据库中获取数据并生成一个新的persistent状态的Entity对象,然后将该新的persistent状态的Entity对象的所有属性设置为与detached状态的Entity对象的属性一致(即将detached状态的Entity对象的数据复制到新的persistent状态的Entity对象),最后就是将新创建的persistent状态的Entity对象作为结果返回。这里要注意merge()与lock()/update()/saveOrUpdate()的区别。

1.Hibernate Native API进行融合操作示例如下:

Person person = session.byId( Person.class ).load( personId );//Clear the Session so the person entity becomes detachedsession.clear();person.setName( "Mr. John Doe" );person = (Person) session.merge( person );

2.JPA API进行融合操作示例如下:

Person person = entityManager.find( Person.class, personId );//Clear the EntityManager so the person entity becomes detachedentityManager.clear();person.setName( "Mr. John Doe" );person = entityManager.merge( person );

转载地址:http://nilai.baihongyu.com/

你可能感兴趣的文章
JS最佳实践——单例模式
查看>>
通过pcre、zlib、openssl等库源码来源码编译nginx
查看>>
为php添加gd库支持
查看>>
$'\r': command not found
查看>>
bash脚本:一键安装MYSQL5.6
查看>>
javascript实现压缩图片
查看>>
webpack教程
查看>>
安装composer时出现 failed to open stream: HTTP request failed!的错误
查看>>
禁用HBuilderX自动更新
查看>>
linux服务器安全优化之网站目录权限设置
查看>>
自己写的ajax工具
查看>>
ajax之POST请求就404,GET请求就正常200
查看>>
error: failed to push some refs to
查看>>
删除远端git分支
查看>>
<template> cannot be keyed. Place the key on real elements instead.
查看>>
npm install chromedriver 出错
查看>>
Permission denied (publickey). fatal: Could not read from remote repository.
查看>>
Android JNI介绍
查看>>
C++字符串函数
查看>>
mknod详解
查看>>