编程开发 购物 网址 游戏 小说 歌词 快照 开发 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 编程 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
移动开发 架构设计 编程语言 互联网 开发经验 Web前端 开发总结
开发杂谈 系统运维 研发管理 数据库 云 计 算 Java开发
VC(MFC) Delphi VB C++(C语言) C++ Builder 其它开发语言 云计算 Java开发 .Net开发 IOS开发 Android开发 PHP语言 JavaScript
ASP语言 HTML(CSS) HTML5 Apache MSSQL数据库 Oracle数据库 PowerBuilder Informatica 其它数据库 硬件及嵌入式开发 Linux开发资料
  编程开发知识库 -> 研发管理 -> 关于Jpa使用Update方法进行更新操作,却没有同步到数据库的原因 -> 正文阅读
 

[研发管理]关于Jpa使用Update方法进行更新操作,却没有同步到数据库的原因[第1页]

关于Jpa使用Update方法进行更新操作,却没有同步到数据库的原因 关于JPA的Update操作解释
JPA的Update操作相当于saveOrUpdate,保存调用的是persist,更新则是merge。该方法会判断要操作实体的状态,其实主要是通过当前的实体中是否包含主键,如果含有主键则会进行merge操作,否则就是进行persist操作。
但在使用过程中会出现一种情况,当我们将一个实体从后端查询至前台页面展示,更改数据后,想到后端进行保存,却发现该实体无法保存。其实不能保存是正常的,这首先要从struts2说起了。
当我们在页面点击修改后,我们的参数是通过struts2进行封装成一个实体类的,该实体并没有jpa的entityManager 中托管,是一个游离态的实体,游离态的实体是不能保存到数据库的。
解决方法有如下几种方案:
1.先从数据查询到该实体,在将数据设置到从数据库查询的实体中,然后再保存,这是比较笨的方法。 2.通过使用entityManager 中flush方法将已经使用merger方法进行托管的实体,更新到数据库。
这里稍微解释下eneityManager。
entityManager 有 merge/refresh/flush 方法。
理解eneityManager的这三个方法的作用和区别,首先需要分清楚PersistenceContext 和 EntityManager.
PersistenceContext:是entity的一个实例。
EntityManager:是和PersistenceContext联系在一起的,被用来创建、删除或者查找一个持久化Entity实例。
换句话来说PersistenceContext可以说成是数据库的缓存。
1.merge
通过entityManager将一个存在的实体“同步到”persistenceContext中。
实体的状态将从其单独的状态转换为受persistenceContext管理的状态。
如果Entity是新创建的,则这个方法类似于persist()这个方法。
如果Entity已经存在的,则只作为更新操作。
2.Flush
将PersistenceContext的信息同步到数据库中。
当触发Flush这个动作的时候,所有的实体都将会被insert/update/remove到数据库中。
数据库不会触发Commit的操作。
3.Refresh
Refresh的作用是从数据库中将Entity的状态进行更新操作。如果Entity和数据库中的数据不一致,将更新数据库中的数据到Entity中。
3.通过使用entityManager获得EntityManagerFactory重新创建一个新的entityManager,手动使用事物处理进行更新到数据库 。

EntityManager em = this.getEntityManager().getEntityManagerFactory().createEntityManager();
em.getTransaction().begin();
DpcTypeTimeSet dts = this.update(T);
//this.merge(T);
//this.getEntityManager().flush();//此处注释掉事物处理代码可用,即第二种方法
em.getTransaction().commit();

4.在书写Action类时实现ModelDriven接口。
  研发管理 最新文章
开始使用代码编辑器——Sublime Text 3
程序调试
别告诉我你会记笔记——工作中如何使用笔记
android wss 连接不上ejabberd服务器的处理
软件配置管理基线解释
软件配置管理中三个基线概念
伙伴系统之伙伴系统概述
C#之字符匹配
查看域名是否支持IPv6
你对Linux窗口管理程序Tmux了解吗
上一篇文章      下一篇文章      查看所有文章
加:2017-10-29 22:03:55  更:2017-10-29 22:05:59 
VC(MFC) Delphi VB C++(C语言) C++ Builder 其它开发语言 云计算 Java开发 .Net开发 IOS开发 Android开发 PHP语言 JavaScript
ASP语言 HTML(CSS) HTML5 Apache MSSQL数据库 Oracle数据库 PowerBuilder Informatica 其它数据库 硬件及嵌入式开发 Linux开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年11日历
2018-11-18 9:55:42
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程开发知识库