最近在将之前的项目(oracle)数据库切换成mysql,其他几个模块切换都很顺利,但是到了另外一个项目,就出现Batch update returned unexpected row count from update: 0 actual row count: 0 expecte这种问题,说一下我的解决流程,因为报错的时候一直提示是orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:657) 是关于事务提交的,这就说一下Hibernate的提交,首先呢是有一张主表,一张附表,关系可能是一对多,主表的外键呢在附表中关联,Hibernate的操作我看sql执行的执行顺序是先将两张表执行inster语句,然后执行update语句,进行外键的修改,具体打印的的方式可以修改log4j.properties

log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
log4j.loggerorg.hibernate.type.descriptor.sql.BasicExtractor=TRACE
log4j.logger.org.hibernate.engine.QueryParameters=DEBUG
log4j.logger.org.hibernate.engine.query.HQLQueryPlan=DEBUG

这样 就会显示打印执行sql语句时候的参数,当然,首先需要打印sql,在配置文件中开启sql的打印(appconfig.properties)

hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.hbm2ddl.auto=none

上述配置完成后,会清晰的看到sql语句和sql的参数,一开始以为是再做更新的时候,数据没有提交到数据库,再执行update语句的时候没有获取到要求改的主键,所以导致在修改的时候,提示Batch update returned unexpected row count from update: 1 actual row count: 0 ex,要修改一条实际返回0条被修改,其实并不是,都知道在使用mysql的时候,mysql的连接后面要跟上一大串的配置例如这样:

useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true&useAffectedRows=true

知道我在问遍度娘之后,偶然间看到要修改mysql的配置,然后我就做了修改

rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

然后就可以了

是不是很神奇,我对两种配置做了比较,排除相同的配置,我把不同的做了如下举例,并查询其意思

useUnicode=true& 跟  characterEncoding=utf8& 连用characterEncoding=utf8& :解决读取数据库产生的数据乱码的问题,从数据库读数据和写数据时MySQL的默认编码非UTF8编码,需要设置字符集编码为utf8。useSSL=false& :  原因是MySQL在高版本需要指明是否进行SSL连接,我用的是5.7版本,所以就屏蔽掉了serverTimezone=GMT%2B8& : 用于解决java应用比数据库时间早的问题,出现这种情况是因为mysql-connector-java  依赖没有指定版本,在mysql升级到8.0之后,驱动包跟之前不一样了,默认时区是全球统一时间 (UTC),北京时间是 UTC+8,解决办法就是设置成为上海的时区就行allowMultiQueries=true&useAffectedRows=true
默认值: 不使用受影响的行的数量进行返回,而是返回找到的行的数量值
具体场景:当该值是false时,执行【UPDATE】语句,在该【UPDATE】的条件下可以找到3条记录,但是实际上只更新了2条数据,因为第三条数据将要修改的值与原来的值相同,则该【UPDATE】语句会返回3、而有时候我们希望他返回2、则设置该参数值为 TRUE
从哪个版本开始有这个参数:5.1.7--------------------------------------------------------------------------------------------------------------------------------------------------------------------------rewriteBatchedStatements=true& MySQL的JDBC连接的url中要加rewriteBatchedStatements参数,并保证5.1.13以上版本的驱动,才能实现高性能的批量插入。
MySQL JDBC驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入,直接造成较低的性能。
只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL
另外这个选项对INSERT/UPDATE/DELETE都有效useUnicode=true& 跟  characterEncoding=utf8& 连用characterEncoding=UTF-8& :解决读取数据库产生的数据乱码的问题,从数据库读数据和写数据时MySQL的默认编码非UTF8编码,需要设置字符集编码为utf8。zeroDateTimeBehavior=convertToNull  0datetime反应

具体的到底是那个配置出现的问题,我没有做继续的深究,还请 知道的大神可以 指点一下小弟

mysql保存提示 HHH000315:Batch update returned unexpected row count from update: 1 actual row count: 0 ex相关推荐

  1. Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1;

    Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; 数据库表的i ...

  2. org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actua

    hibernate更新数据的时候,如果数据不存在,就报org.hibernate.StaleStateException: Batch update returned unexpected row c ...

  3. 解决Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1的一种方法

    使用JPA时,报错Batch update returned unexpected row count from update [0]; actual row count: 0; expected: ...

  4. JPA 异常Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

    这个错误,看了网上大部分的贴子都说是主键自增设了值问题,但是我的主键非自增的手动赋值了,也出现此错误,原因如下: JPA使用 save更新数据的时候,如果数据没有任何变化也会报错,我们翻译一下这个错误 ...

  5. Mysql语句提示You can't specify target table 'XXX' for update in FROM clause解决方案

    错误提示:You can't specify target table 'XXX' for update in FROM clause 不能从子句中指定更新表的目标表"XXX" 原 ...

  6. org.hibernate.StaleStateException:Batch update returned unexpected row count from update [0]; actua

    解决办法 <generator class="native"/>中的class由原来的"native"设置为"assigned" ...

  7. MySQL数据字典提示1146不存在的问题解决

    最近某套MySQL因为磁盘挂载问题,异常宕机,拉起后,数据库能正常访问了,但是在error.log一直提示这个错误, [ERROR] InnoDB: Table `mysql`.`innodb_tab ...

  8. MySQL错误提示语句及翻译——详情请看我免费分享的文件

    一者.礼敬诸佛.二者.称赞如来.三者.广修供养.四者.忏悔业障.五者.随喜功德.六者.请转法輪.七者.请佛住世.八者.常随佛学.九者.恒顺众生.十者.普皆回向.添加链接描述 OS error code ...

  9. 使用MySql保存session

    2019独角兽企业重金招聘Python工程师标准>>> 本文来源于:http://www.lai18.com/content/433951.html 本文实例讲述了php使用MySQ ...

  10. MySQL保存或更新 saveOrUpdate

    1. 引子 在项目开发过程中,有一些数据在写入时候,若已经存在,则覆盖即可.这样可以防止多次重复写入唯一键冲突报错.下面先给出两个MyBatis配置文件中使用saveOrUpdate的示例 <! ...

最新文章

  1. python mac地址转换_Python MAC地址 获取,过滤,转换 Python MYSQL 数据获取,比较
  2. 65 Airflow组成部分的概念介绍
  3. Merkle 树——空间换时间,分而治之的hash表,通过根节点是由它的两个子节点内容的哈希值组成来校验数据完整性,定位篡改的数据位置...
  4. 计划程序:拒绝重复工作,让效率翻倍!
  5. 48-如何实现unix2dos功能
  6. 为什么我写的c++程序在windows下比linux下要快,linux比windows快很多倍除了算法的优势 有没C比C++快的原因?...
  7. 【DP】【高精】幸运票 (jzoj 2122)
  8. CCF201912-2 回收站选址
  9. scp命令不会复制隐藏文件
  10. C++中的多重继承(二)
  11. MySql 存储大量长字节 Text报错处理办法
  12. [Hive]-Table
  13. Mac 抓包工具wireshark使用
  14. ubuntu风扇转速控制与系统状态监控
  15. rdkit 计算环、芳香环数
  16. 触动小精灵似乎已断开与互联网的连接解决方法
  17. Android按键之Menu详解
  18. 出租分数 20作者 陈越单位 浙江大学
  19. Android源码 --- BroadCast源码分析
  20. 人工智能之父马文・明斯基

热门文章

  1. 2021年最近的猝死案例有点多!!!(关注我,让你活的更久一点)
  2. SDM439/SDM429/SDM450 Sensors Overview (80-PF208-11)
  3. Vue + Spring Boot 项目实战(十三):使用 Shiro 实现用户信息加密与登录认证
  4. android app icon素材,史上最全的APP图标模板素材以及设计格式最全的
  5. 张朝阳一天只睡4小时?不知道,反正我每天都睡足7小时
  6. 米尔MYD-JX8MPQ yocto 编译流程 (记录)
  7. Linux From Scratch docker lfs build 在Fedora 31 Linux上自己动手从源码一步一步编译出一个x86_64架构LFS Linux操作系统
  8. JAVA图形界面设计(GUI)学生成绩管理系统实战练习之登陆界面
  9. 2020滑铁卢大学计算机科学学费,滑铁卢大学专业
  10. [966]无需ROOT就能让你用上Xposed框架