Hibernate merge和update的区别

今天做了个测试,写了个测试用例来看看merge与update时控制台打印出来的日志有什么不一样。实体bean很简单,就id和name两个字段,接下来分别给出以下几种测试情形的控制台日志内容: 


1. 数据库记录已存在,更改person的name为一个新的name。 

merge方法打印出的日志如下: 

Hibernate: select person0_.id as id0_0_, person0_.name as name0_0_ from 
person person0_ where person0_.id=? 
Hibernate: update person set name=? 
where id=? 

 



update方法打印出的日志如下: 
Hibernate: update person set name=? 
where id=? 

2. 数据库记录已存在,更改person的name和数据库里对应id记录的name一样的值。 


merge方法打印出的日志如下: 
Hibernate: select person0_.id as id0_0_, 
person0_.name as name0_0_ from person person0_ where person0_.id=? 
此处相对于第一种情形少了update的动作 update方法打印出的日志如下: Hibernate: update person set name=? where id=? 

 



3. 
数据库记录不存在时,也就是你传的实体bean的ID在数据库没有对应的记录。 

merge方法打印出的日志如下: 
Hibernate: select person0_.id as id0_0_, person0_.name as name0_0_ from person person0_ where person0_.id=? 
Hibernate: insert into person (name) values (?) 

 



如果没有对应的记录,merge会把该记录当作新的记录来插入。此处我很疑惑,因为我传得person实体对象里写明了id值的,它为什么还会做插入的动作呢? 


update方法打印出的日志如下: 

Hibernate: update person set name=? where id=? 2009-11-22 20:59:55,359 ERROR [org.hibernate.jdbc.AbstractBatcher] - 
Exception executing batch: 
org.hibernate.StaleStateException: Batch update 
returned unexpected row count from update [0]; actual row count: 0; expected: 1 

 




以下的内容摘抄自网上: 
  当我们使用update的时候,执行完成后,我们提供的对象A的状态变成持久化状态。 

  但当我们使用merge的时候,执行完成,我们提供的对象A还是脱管状态,hibernate或者new了一个B,或者检索到 
一个持久对象B,并把我们提供的对象A的所有的值拷贝到这个B,执行完成后B是持久状态,而我们提供的A还是托管状态

转载于:https://www.cnblogs.com/zengda/p/4415447.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qdir 类似工具_qdir 类似工具_支持 Win8.1,全能资源管理器 Q-Dir 5.74 发布

Q-Dir是一款帮助用户管理本地文件和文档的工具。支持快速访问定位本地磁盘、网络驱动器、USB移动设备及其他存储设备中的文件或文档。依靠强大的Quadro-View技术,使得Q-Dir成为一款优秀的文件管理工具。Q-Dir文件管理软件特色:• 收藏夹:快速…

面试题:求所占字符

/* 在32位系统下&#xff0c;分别定义如下两个变量&#xff1a;char *p[10],char(*p1)[10],sizeof(p),sizeof(p1)分别值为___________。 */ #include <stdio.h> #include <stdlib.h>void main() {char *p[10],(*p1)[10],p2[10],p3;printf("%d,%d,%d,%d,%d,%d&…

mysql数据库函数转义函数_MySql数据库-查询、插入数据时转义函数的使用

最近在看一部php的基础视频教程&#xff0c;在做案例的时&#xff0c;当通过用户名查询用户信息的时候&#xff0c;先使用了转义函数对客户提交的内容进行过滤之后再交给sql语句进行后续的操作。虽然能看到转义函数本身的作用&#xff0c;但是仍然有一些疑惑。疑惑一&#xff1…

python pyquery安装_win7下python安装pyquery

安装pyquery之前首先要明确一点&#xff0c;easyinstall 是一款python包管理器&#xff0c;类似于node的npm&#xff0c;用于安装python的扩展包&#xff0c;它安装的包是以*.egg的方式。要安装pq需要经历以下步骤&#xff1a;1&#xff1a;下载easyinstall设置环境变量&#x…

DbContext 和ObjectContext两者的区别

一是ObjectContext是一种模型优先的开发模式&#xff0c;DbContext是代码优先的开发模式。这是两者最根本的区别。 同时两者之间可以相互转换&#xff1a; 下面给出转换的例子 1 DbContext转为ObjectContext using System.Data.Entity.Infrastructure ObjectContext context (…

mysql的简介与优点_SQL 简介以及MySQL的优点

原文摘自&#xff1a;W3school。还有一些是本人自己整理的SQL 是用于访问和处理数据库的标准的计算机语言。什么是SQL&#xff1f;SQL 指结构化查询语言SQL 使我们有能力访问数据库SQL 是一种ANSI的标准计算机语言注&#xff1a;ANSI&#xff0c;美国国家标准化组织SQL能做什么…

反射之关于MethodInfo的使用

1、MethodInfo类是在System.Reflection命名空间底下&#xff0c;既然是在Reflection空间底下。故名思议关于反射相关的操作&#xff0c;其中比较重要的方法是Invoke()方法&#xff0c;它是加载相同程序集的方法。简单用法 string command "AnnouncementSave"; //通过…

vue添加定位功能_Vue如何实现锚点定位功能?

整个链路应该是这样的&#xff0c;用户在消息中心中看到回复自己的信息&#xff0c;点进去后会跳到视频播放页面&#xff0c;页面url中会带上此次消息的replyId(就简称rid吧)&#xff0c;然后接下来的问题就是有两个&#xff0c;一个是评论本身是分页的&#xff0c;你的评论不一…

织梦直接往数据库写入数据

x: 不是必须的 1: 值为1 0: 值为0转载于:https://www.cnblogs.com/bushe/p/4425298.html

wshttpbinding java_WCF自定义用户账号密码之WCF系结模式wsHttpBinding的Java调用

再回到编辑Web服务属性设定画面﹐刚刚所点击的[使用开发默认值]的复选框如果已经有被勾选了﹐请将勾选取消。然后先离开编辑Web服务属性设定画面。1.7. 加入CallbackHandler 档案这里需要加入一个继承CallbackHandler的档案TrustStoreCallbackHandler.javapublic class TrustSt…

.jardesc文件

第一次导出jar文件的时候可以选择记录配置到一个这样的文件中&#xff1b;下次导出的时候&#xff0c;点这个文件->右键->创建jar(或双击)&#xff0c;就可以重新生成jar文件了转载于:https://www.cnblogs.com/erbin/p/4427997.html

java中postMethod_HttpClient结合PostMethod调用接口

解决方法&#xff1a;HttpClient client new HttpClient();PostMethod post new PostMethod("http://192.168.0.189:8500/short");post.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charsetutf-8");// 在头文件中设…

WPF 颜色转换

从字符串到画刷&#xff1a; var converter new System.Windows.Media.BrushConverter(); var brush (Brush)converter.ConvertFromString("#FFFFFF90"); Fill brush; 转载于:https://www.cnblogs.com/xpvincent/p/4431514.html

android指纹java_Android

Android M指纹的资料太少&#xff0c;经过一段时间阅读原生Android代码&#xff0c;写了以下例子&#xff0c;贡献出来给需要帮助的人。以下内容基于64位的高通CPU&#xff0c;搭载fpc1020芯片&#xff0c;此部分代码在原生android上做了更改&#xff0c;以应付工厂指纹的测试。…

about-ie下模拟input file上传功能失效

Q&#xff1a;IE9下file提交到iframe中&#xff0c;load一直不触发&#xff0c;其他高级浏览器均无此问题 解决方案&#xff1a;不使用js模拟 input click事件&#xff0c;取而代之的是把真实的input设置为要触发元素的大小&#xff0c;进行触发onchange原因分析&#xff1a;低…

java把收集的数据节点_java面试题收集(04)

1、rebbitmq的使用场景有哪些&#xff1f;(1)单发送单接受使用场景&#xff1a;简单的发送与接受&#xff0c;没有特别的处理。(2)单发送多接受使用场景&#xff1a;一个发送端&#xff0c;多个接收端&#xff0c;如分布式的任务发布&#xff0c;要保证消息发送的可靠性&#x…

go java gc_图解Golang的GC垃圾回收算法

虽然Golang的GC自打一开始&#xff0c;就被人所诟病&#xff0c;但是经过这么多年的发展&#xff0c;Golang的GC已经改善了非常多&#xff0c;变得非常优秀了。以下是Golang GC算法的里程碑&#xff1a;v1.1 STWv1.3 Mark STW, Sweep 并行v1.5 三色标记法v1.8 hybrid write bar…

统计学的经典书籍指南 (转载自:http://blog.csdn.net/ysuncn/article/details/1943679)...

一、统计学基础部分 1、《统计学》 David Freedman等著&#xff0c;魏宗舒&#xff0c;施锡铨等译 中国统计出版社 据说是统计思想讲得最好的一本书&#xff0c;读了部分章节&#xff0c;受益很多。整本书几乎没有公式&#xff0c;但是讲到了统计思想的精髓。 2、《Mind on …

Linux Bash Shell j简单入门

BASH 的基本语法 最简单的例子 —— Hello World! 关于输入、输出和错误输出 BASH 中对变量的规定&#xff08;与 C 语言的异同&#xff09; BASH 中的基本流程控制语法 函数的使用 2.1 最简单的例子 —— Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是 …

jpa mysql脚本迁移_JPA通过LOAD DATA LOCAL INFILE大批量导入数据到MySQL

连接层代码&#xff1a;import org.hibernate.Session;import org.hibernate.internal.SessionFactoryImpl;import org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLE…